トップページ⇒tech
1001コメント290KB

C++相談室 part37

レス数が1000を超えています。これ以上書き込みはできません。
0001v(^・^)vNGNG
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。

前スレ part36
http://pc5.2ch.net/test/read.cgi/tech/1096304546/

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0002v(^・^)vNGNG
1 http://mimizun.mine.nu:81/2chlog/tech/piza.2ch.net/tech/kako/980/980175292.html
2 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html
0003v(^・^)vNGNG
16 http://pc5.2ch.net/tech/kako/1045/10457/1045746245.html
17 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/
31 http://pc5.2ch.net/test/read.cgi/tech/1086185282/
32 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/
34 http://pc5.2ch.net/test/read.cgi/tech/1092018643/
35 http://pc5.2ch.net/test/read.cgi/tech/1093958200/
36 http://pc5.2ch.net/test/read.cgi/tech/1096304546/
0004v(^・^)vNGNG
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

[禿 Stroustrup]
 http://www.research.att.com/~bs/
[C++ International Standard]
 http://www.kuzbass.ru/docs/isocpp/
 http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
 http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)
0005v(^・^)vNGNG
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
 http://www.amazon.com/exec/obidos/ASIN/0201760428/
0006v(^・^)vNGNG
■Books(Templateまわり)■
Effective STL
 http://www.amazon.com/exec/obidos/ASIN/0201749629/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
 http://www.amazon.com/exec/obidos/ASIN/0201704315/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
 http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
 http://www.amazon.com/exec/obidos/ASIN/0321227255/
0007デフォルトの名無しさんNGNG
>>1乙!
0008v(^・^)vNGNG
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
 ACE http://www.cs.wustl.edu/~schmidt/
 Blitz++ http://www.oonumerics.org/blitz/
 flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
 http://www.trumphurst.com/cpplibs/cpplibs.phtml
 (日本語) http://www.kmonos.net/alang/cpp/lib.html
0009デフォルトの名無しさんNGNG
age
0010v(^・^)vNGNG
STLつかうと一気に実行ファイルサイズが10倍に?!
0011v(^・^)vNGNG
>>10
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0012v(^・^)vNGNG
>>11
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0013v(^・^)vNGNG
■関連スレ■
【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/
ダディクールがC/C++の宿題を片づけます 32代目
http://pc5.2ch.net/test/read.cgi/tech/1097592876/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc5.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
ATL/WTL Part3
http://pc5.2ch.net/test/read.cgi/tech/1095442366/
0014デフォルトの名無しさんNGNG
実行ファイルなんていくら大きくなっても気にしない
0015v(^・^)vNGNG
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
0016v(^・^)vNGNG
■コンパイラスレ■
フリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/
GCCについて part4
http://pc5.2ch.net/test/read.cgi/tech/1090062751/
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/
OpenWatcom C++
http://pc5.2ch.net/test/read.cgi/tech/1033433728/
"Code of the Nerds" Digital Mars C/C++
http://pc5.2ch.net/test/read.cgi/tech/1044210976/
0017v(^・^)vNGNG
>>15
#include <stdafx.h>

後死ね。
0018v(^・^)vNGNG
■開発環境スレ■
★初心者にVisual C++を教えるスレ★ Part15
http://pc5.2ch.net/test/read.cgi/tech/1097880265/
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
C++Builder相談室 Part11
http://pc5.2ch.net/test/read.cgi/tech/1094749339/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/
0019v(^・^)vNGNG
>>17
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0020デフォルトの名無しさんNGNG
>>17
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0021デフォルトの名無しさんNGNG
行列計算用のライブラリで計算速度が速く使いやすいおすすめのものがあれば
紹介していただけないでしょうか?
0022v(^・^)vNGNG
テンプレ終了。
待ってろって言ったのに埋めやがって、
前スレに次スレへのリンク貼れなかったじゃないか愚か者ども。
0023デフォルトの名無しさんNGNG
>>21 >8
0024デフォルトの名無しさんNGNG
>>10,11,12,15,17,19,20
テンプレ乙!
>>14
テンプレにマジレス乙!
>>21
Blitz++ http://www.oonumerics.org/blitz/ていうかテンプレくらい見ろ
0025デフォルトの名無しさんNGNG
>21
あとは ublas とか?
0026デフォルトの名無しさんNGNG
4x4 行列, 単精度浮動小数点数限定なら DirectX でも良いけど。
0027デフォルトの名無しさんNGNG
>>21
liboctave

0028全スレ>>998NGNG
やっと分かった
va_list 版ってのは関数名に v の prefix つけて、va_end をしないのが基本なの?
0029前スレ>>998NGNG
typeid みてみると va_list って char* なのか…
てことはポインタを進ませながら無理矢理キャストするって実装なのか……?
もしそうなら参照で渡さない限り va_end しても意味ないのか
0030デフォルトの名無しさんNGNG
どう実装されているかはstdarg.hを見れば分かる。
0031デフォルトの名無しさんNGNG
>>28
すまん、さっきのコードは間違いだらけだった。
↓正しくはこんな感じ。
ore_printf(const char *format,...) {
static int count = 0;
printf("[%08.8d]", count++);
va_list arg_list;
va_start(arg_list, format);
vprintf(format, arg_list);
va_end(arg_list);
print("\n");
}

関数名云々は趣味の問題だけど標準関数の命名規則に従っておいたほうが第三者が見た時に分かりやすいかと。
va_list まわりの処理は慣れるまでは他人の書いたコードを猿真似するのがいいと思うよ。
あと、va_list の実装は環境や処理系によって極端に異なるから基本的には気にしちゃダメ。
0032デフォルトの名無しさんNGNG
>>28
vprintf とかは、可変長引数をダラダラ渡す代わりに
va_list を1個だけ渡すのよ。そんだけ。

別の言い方をすれば、可変長引数はそのまま渡せないから
va_list として渡すと言うこと。でも、普通の printf では va_list を
単なる値として受け取っちゃうから、va_list を va_list として
受け取って使ってくれる関数が必要になるわけさ。
それが v******** っつー関数群。

そんで、va_end するのは va_start した関数と同じ関数であるべきだから、
va_list を渡された関数が va_end しないのは当然のこと。
0033デフォルトの名無しさんNGNG
>>31
ウホッ。リロードせずに書いたらかぶっちまったスマソ。

>>28
具体例で説明するなら下みたいな感じ。

nurupo(const char* ga, ...) {
va_list arg_list;
va_start(arg_list, ga);
vnurupo(ga, arg_list);
va_end(arg_list);
}

vnurupo(const char* ga, va_list arg_list) {
実装
vprintf(ga, arg_list); みたいな事も出来る。
}
0034デフォルトの名無しさんNGNG
>>33
>ウホッ。リロードせずに書いたらかぶっちまったスマソ。
まぁ気にするな。

  ∧_∧
  ( ・∀・) | | ガッ
 と    ) | |
   Y /ノ 人
    / ) <  >__∧∩
  _/し'  . V`Д´)/
 (_フ彡      /  ←>>33
0035デフォルトの名無しさんNGNG
C++のライブラリを集めるスレッドとか無いの?
0036デフォルトの名無しさんNGNG
計算…uBLAS,blitz++
ネット…ACE
正規表現…boost
スレッド…boost
その他…boost
暗号…Crypto++
GUI…gtkmm,QT
0037デフォルトの名無しさんNGNG
XML…Xalan-C++,Xerces C++,ICU
0038デフォルトの名無しさんNGNG
#include <vector>
#include <deque>

main()
{
std::vector<int> vec(20);
for(int i=0;i<20;++i)
 vec[i] = i;
std::deque<int> deq(vec.begin(), vec.end());
}

main()
{
std::deque<int> deq(20);
for(int i=0;i<20;++i)
 deq[i] = i;
std::vector<int> vec(deq.begin(), deq.end());
}

上のmainが通るのに
下のmainが

[C++エラー] Could not find a match for
'std::vector<int,std::allocator<int> >::vector(std::deque<int,std::allocator<int> >::iterator,
std::deque<int,std::allocator<int> >::iterator)'.

で通らないのは、どうしてですか?
0039デフォルトの名無しさんNGNG
トオルよ
0040デフォルトの名無しさんNGNG
通らないとおかしい
環境書け
0041デフォルトの名無しさんNGNG
BCB3です。
Borland C++ 5.3 for Win32 Copyright (c) 1993, 1998 Borland International
これコンパイラ部分だけフリーの新しいのに入れ替えられないのかな…
0042デフォルトの名無しさんNGNG
で>>38はどういうエラーなの?
BCB3ではイテレータ用のコンストラクタが実装されていないということ?
0043デフォルトの名無しさんNGNG
Copyright の年から考えてISO C++には対応してないと考えるほうが自然かと
0044デフォルトの名無しさんNGNG
newで作成されたTestクラスのインスタンスをdeleteする場合、
下記のように作成したインスタンスを参照に代入してdeleteしても問題ないのでしょうか?

class Test{};

int main()
{
Test* test = new Test();

Test& rTest = *test;

delete &rTest;
}
0045デフォルトの名無しさんNGNG
>>44
保障はされてないんじゃないかな・・・。
0046デフォルトの名無しさんNGNG
>>45
自身なさげなので敢えて聞くのも申し訳ないですけど
根拠とかあります?
0047デフォルトの名無しさんNGNG
>>46
いや、全然ない。
0048デフォルトの名無しさんNGNG
>>44
参照変数のアドレスは参照元のアドレスだから大丈夫でしょ。
つーかなんだその怪しげなコードは。
0049デフォルトの名無しさんNGNG
>>44
printf("%p %p", test, &rTest);

同じ値が出ればおkって事で。
0050デフォルトの名無しさんNGNG
あの偉大なヒトラー総統も一兵士だったときには見張りをなさっていたのでしょうか?
0051デフォルトの名無しさんNGNG
>>50
歩哨はされてないんじゃないかな・・・。
0052デフォルトの名無しさんNGNG
正しく入力すればこれもOK?
int main ()
{
int* p = new int();
int address;

std::cout << "p = " << int(p) << std::endl << "p2 = ";
std::cin >> address;

delete reinterpret_cast<int*>(address);
}
0053デフォルトの名無しさんNGNG
>>44
環境によってはポインタから参照になったときに情報が欠落する可能性もあるんじゃないかなぁ。
0054859NGNG
>>44
多くの処理系でこのプログラムは実行できるのは事実
だけど、インスタンスへのリファレンスの先が
なくなってしまうのだから、限りなくおすすめできない。

もし Test がメンバ変数を持っていて new Test で割当て
られた領域が delete されたあと、再利用されたとしたら
その後の rTest 経由のこの領域に対するアクセスは期待
しない動作を生むことになる。

メンバー変数さえなければ下みたいなプログラムも
可能な処理系が多いんだけど、限りなく裏技だなぁ。
struct Test { void M() { cout << 1; } };
int main() { ((Test*)0)->M(); }
0055デフォルトの名無しさんNGNG
>>54
それはぽいんたでもおなじではないか
0056デフォルトの名無しさんNGNG
>>55
そう、それを言わんがために、最後の例を書いた。
0057デフォルトの名無しさんNGNG
>>56
それはにゅうをつかうなということではないか
0058デフォルトの名無しさんNGNG
>>44 は全く問題ないでしょ。
要はリファレンスのアドレスとは何か? という事になる。
参照先オブジェクトのアドレスでしかありえない。
他に何のアドレスがあるというの?
0059デフォルトの名無しさんNGNG
friendクラスと被friendクラスの関係を、UMLで表現する場合ってどうすればいいでしょうか?

あと、あるクラスのメンバとして、TemplateHoge<int> m_hogelist;というメンバが定義されていた場合、
これをUMLで表現するにはどうすればいいでしょうか?

できれば、AAで表現していただけるとありがたいです。
もし、無理だったら、エクセルでつくっていただいて、アプロダにアップしてくれるだけでいいです。
0060デフォルトの名無しさんNGNG
>>58
const参照の場合複製される可能性があるっけ?
0061デフォルトの名無しさんNGNG
>>60
ないでしょう。もしあったとしたらconst参照は(特に関数呼び出しにおいて)
その意義の大半を失いませんか?
0062デフォルトの名無しさんNGNG
>>59
> あと、あるクラスのメンバとして、TemplateHoge<int> m_hogelist;というメンバが定義されていた場合、
bind

あるいはクラステンプレートとは別に TemplateHoge<int> という「クラス」を用意してしまう。
0063デフォルトの名無しさんNGNG
>>62
AAでかいてくれるとウレシイです^^
0064デフォルトの名無しさんNGNG
>>60
そんな仕様だったらコピー禁止オブジェクトへのリファレンスが作れなくなる
0065デフォルトの名無しさんNGNG
>>59
禿しくスレ違いの悪寒。
0066デフォルトの名無しさんNGNG
ただの依存にしといて friendとか注釈つけとけ
0067マイク ◆yrBrqfF1Ew NGNG
>環境によってはポインタから参照になったときに情報が欠落する可能性もあるんじゃないかなぁ。

ポインタからリファレンスになって欠落する情報ってなんだ?
聞いたことねえな
0068デフォルトの名無しさんNGNG
>>67
ガッ じゃないか?w
0069デフォルトの名無しさんNGNG
int a = 99;
int c( a );
が VC7.1 でコンパイル通るんですが、このような
コンストラクタ的な初期化は C++ の規格で許されてるんですか?
0070デフォルトの名無しさんNGNG
普段どーやってコピーコンストラクタ書いてるんだろう…
0071デフォルトの名無しさんNGNG
>>69
許されています。
0072マイク ◆yrBrqfF1Ew NGNG
>>68
NULLを逆参照してリファレンスにしてよかったか?
int &ref_to_null(*reinterpret_cast<int*>(NULL));
0073デフォルトの名無しさんNGNG
>>72
NULL に対して * 演算子を適用した時点で、すでに未定義。鼻から悪魔が
出てくるとか、いきなり PC が暴走しても文句言えない。
0074マイク ◆yrBrqfF1Ew NGNG
あそう。
0075デフォルトの名無しさんNGNG
>>67
たとえばポインタの指している先のブロックサイズとか。
一般的な実装ではメモリブロックの前に埋め込んでおくとか別の場所に隠しておくが、
ポインタ自体が保持してはいけないという規則は無い。
仮にそういう実装があれば参照になったときに欠落する可能性はある。
0076デフォルトの名無しさんNGNG
C++で∫_1^10 (cos x - 0.87) * cos x dxの数値解を求めたいのですが、
どうやってコーディングすればよいか解かりません。
どなたか教えていただけませんか?
0077デフォルトの名無しさんNGNG
>>76はHSPスレにすら投げる無差別マルチ
0078デフォルトの名無しさんNGNG
>>76
単純に不定積分してから
その数式で計算すればいいのでは?
0079デフォルトの名無しさんNGNG
∫て言いたかっただけだろ (プ
008078NGNG
>>76
台形公式とかシンプソンの公式とかで
x の範囲を分割して計算するとか、
そういうの期待しているの?
(HSP のスレで 78 の回答がダメそうに言われたんだけど)
0081デフォルトの名無しさんNGNG
>>76
おとなしく Mathematica か Maple でも買っとけ。
0082デフォルトの名無しさんNGNG
>>76
#include <stdio.h>
#include <math.h>
double func(double x) {
return (cos(x) - 0.87) * cos(x);
}
double integrate(double x1, double x2, int n) {
int i;
double sum;
double x;
double h;
h = (x2 - x1) / n;
x = x1;
for(sum = 0, i = 0; i < n; i += 2) {
sum += func(x) + 4 * func(x + h) + func(x + 2 * h);
x += 2 * h;
}
return sum * h / 3.0;
}
int main() {
printf("%lf\n", integrate(1.0, 10.0, 100));
}
0083マイク ◆yrBrqfF1Ew NGNG
>>75
あそう
0084デフォルトの名無しさんNGNG
>>75
いや、そんな実装はありえないだろ。
大体ブロックサイズってなんなんだよ。
new したものだけがポインタじゃないんだから
ブロックサイズなど保持する意味はない。
0085デフォルトの名無しさんNGNG
2chの弱点発見!!!

2chでは、UMLがかけない!

ひろゆきさん、UML描画機能つきのギコナビつくって・・・おねがい。
0086デフォルトの名無しさんNGNG
>>85
TeXの書式を認識してくれたら結構便利だよね
0087デフォルトの名無しさんNGNG
User Mode Linux
0088デフォルトの名無しさんNGNG
FILE *FP = fopen( "Hoge.txt", "wt");
char S[ 256];
sprintf( S, "TEST MESSAGE"),   // ;じゃない
fputs( S, fp),            // ;じゃない
fputs( "\n", fp);
fclose( FP);

これってコンパイラ通っちゃうんですけど、C++はいいんでしたっけ?
0089デフォルトの名無しさんNGNG
はい
0090デフォルトの名無しさんNGNG
そういえば昔学校で習ったきり、unionって使ったこと無いんだけど
皆々様はどう?
0091デフォルトの名無しさんNGNG
>>90
使用例:組込みの入出力周り, インタプリタ, etc..
0092デフォルトの名無しさんNGNG
>>91
縁がない分野ばかりだ、ちゃんと使い道あるのねん
サンクス
0093デフォルトの名無しさんNGNG
>>88
んなもん、Cでも問題なく通るぞ。
#コメント(//)以外は。
0094デフォルトの名無しさんNGNG
>>88
入門書を一から読み直せ
(C++って言ってるけど内容は100%Cのような…ヌルポ)
0095デフォルトの名無しさんNGNG
  ∧_∧  \\
  ( ・∀・)   | |  /〃_/_〃
 と    )   | | .∧   / / / / /
   Y /ノ    人 ./   / /   ノ
    / )    <  >__∧∩
  _/し'_//. V`Д´)/ ←>>94
 |     /       /
 | 100t 彡
0096デフォルトの名無しさんNGNG
いきなりですみませんが質問させて下さい。
コンパイラの最適化は考慮に入れないとして、
int func(int i);
class X {
  int mfunc(int);
}
void main(){
  X x;
  int (*pfunc)(int) = func;

  int a = func(1); // 行a
  int b = pfunc(2); // 行b
  int c = x.mfunc(3); // 行c
}
の場合行aとbの実行速度に違いはないと思ってますがcはa,bと
比べて呼び出しにコストがかかるんでしたっけ?
それともコストがかかるのは仮想関数呼び出しの時でしたっけ?

参考文献等ありましたら教えていただけないでしょうか。

ただし素人はひっこんでろ。
0097デフォルトの名無しさんNGNG
>ただし素人はひっこんでろ。
この一行がネタ回答を欲しがってるようにしか見えない
0098デフォルトの名無しさんNGNG
自分で最適化無しでコンパイルしてベンチとればすぐ分かるような。
009996NGNG
>>98
いや、結果が知りたいんじゃなくって
どうしてそうなるのかがしりたいんだよ。
0100デフォルトの名無しさんNGNG
まずaとbに違いが無いわけねーだろカス素人が
0101デフォルトの名無しさんNGNG
aとbは機械語レベルでは一緒
仮想関数はVTBLを介するからcより遅い
cがどうなるかはワカンネ
0102デフォルトの名無しさんNGNG
機械語が分かるならthiscallでぐぐれば分かる
0103デフォルトの名無しさんNGNG
オブジェクトの参照(const Object &) に NULL を入れたら暴走しますた。
仕様ですか?
0104デフォルトの名無しさんNGNG
ポインタと違って参照にNULLは入れられません。
0105デフォルトの名無しさんNGNG
ありがとうございまつ。理解しますた。
0106デフォルトの名無しさんNGNG
catch( const std::exception& e ) みたいに、
catch に const 入れるのって冗長ですか?

文字列リテラル投げるときは必要なんでしょうけど…
0107デフォルトの名無しさんNGNG
どうせコピーされた物が渡されるので付けても付けなくても一緒
0108デフォルトの名無しさんNGNG
cは最適化の前提が無いならthisポインタ積む分遅いだろ。
0109デフォルトの名無しさんNGNG
>>107
そりゃそうですけど…
やっぱり冗長ですかねぇ
0110デフォルトの名無しさんNGNG
>>108
96じゃない素人ですけど
mfunc(X*,int)
という形になってpush,popする分遅いということですか?
0111デフォルトの名無しさんNGNG
そもそも const は冗長な場合の方が多い。
冗長だから付けないっていう理由はおかしい。
0112デフォルトの名無しさんNGNG
>>111
「冗長」の意味を調べ直されたし
0113デフォルトの名無しさんNGNG
>>110
積むといってもレジスタかも知れんが、そういうこと。
0114デフォルトの名無しさんNGNG
>>112
別に111の言い方も問題ないだろ。
0115デフォルトの名無しさんNGNG
>>107,109
参照で受けてるから、コピーされないよ。
const 付けるかどうかの判断は、
その後 e の内容を改変するようなオペレーションが
あるかどうかを、コンパイル時に見つける必要があるか
どうかによって決める。
0116デフォルトの名無しさんNGNG
参照で無くてもつけたほうが良い。
パラメータを変更するような関数は設計的によろしくないから
0117デフォルトの名無しさんNGNG
>>115
コピーしたオブジェクトへの参照を受け取るんだと思うんだが…
0118デフォルトの名無しさんNGNG
>>117
struct A {
A() { std::cout << "A::A()" << std::endl; }
A(const A&) { std::cout << "A::A(const A&)" << std::endl; }
A& operator=(const A&) { std::cout << "A::operator=(const A&)" << std::endl; }
};

try
{
try
{
throw A();
}
catch(const A& a)
{
std::cout << "catch 1" << std::endl;
throw;
}
}
catch(const A& a)
{
std::cout << "catch 2" << std::endl;
}

VC6だとコピーが一切起きないんだけど
0119デフォルトの名無しさんNGNG
15.1 -5-
"If the use of the temporary object can be eliminated
without changing the meaning of the program
except for the execution of constructors and destructors
associated with the use of the temporary object,
then the exception in the handler can be initialized directly
with the argument of the throw expression."
0120デフォルトの名無しさんNGNG
いい加減VC6見たいなまだC++の仕様が固まってない頃ので検証すんの辞めろよ。
0121デフォルトの名無しさんNGNG
>>120
g++ でもコピー起きないよ。

structE {
~E() { cout << "~E()" << endl; }
E() { cout << "E()" << endl; }
E( E const& ) { cout << "E( E const& p )" << endl; }
};

int
main() {
try { throw E(); } catch ( E& e ) {}
}
0122デフォルトの名無しさんNGNG
>>116
それは思い込みだな
例外時のトレース情報をとりたいと思ったらどうする?
0123デフォルトの名無しさんNGNG
インスタンスを直接throwすると、コピーが起きないのだろうか…。
適当な場所で A a; と作ってから、throw a; とすると、VC6でもVC7.1でもコピーコンストラクタが走った。

ちなみに、bcc32では、直接でも一旦作ってからでも、コピーコンストラクタが走った。
0124デフォルトの名無しさんNGNG
>>123 >>119
0125デフォルトの名無しさんNGNG
執拗にVC6に拘る厨房
・アンチマイクロソフト厨
・VisualStudioを買えない貧乏人
・新しいPCすら買えない乞食
・古いアプリケーションの機能追加にC++の厳密な使用を持ち込む阿呆
・.NETを一切認めない狂信的Win32信者
0126デフォルトの名無しさんNGNG
More Effective C++ 項目13: 参照で例外を捕まえる

を参照のこと
0127デフォルトの名無しさんNGNG
VC6どうのこうのは他所でやってくれ
0128デフォルトの名無しさんNGNG
typenameって直後に書いてあるものが型名であることを表すと思ってたんだけど、
gcc version 3.3.1 (cygming special)で以下ようにするとエラーになります。
$ cat test.cpp && g++ test.cpp
#include<iostream>
#include<string>
using namespace std;
template< typename Foo > void func( typename Foo val ) {
  typename Foo res;
  res = val + val;
  cout<< res<< endl;
}
int main(void) {
  func<int>(774);
  func<string>( string( "String" ) );
  return 0;
}
test.cpp:4: error: syntax error before `)' token
test.cpp: In function `void func(...)':
test.cpp:5: error: syntax error before `;' token
test.cpp: In function `void func(...) [with Foo = int]':
test.cpp:10: instantiated from here
test.cpp:6: error: `val' undeclared (first use this function)
test.cpp:6: error: (Each undeclared identifier is reported only once for each
function it appears in.)
test.cpp:6: error: `res' undeclared (first use this function)
test.cpp: In function `int main()':
test.cpp:11: warning: cannot pass objects of non-POD type `struct std::string'
through `...'; call will abort at runtime
0129デフォルトの名無しさんNGNG
>>128
-template< typename Foo > void func( typename Foo val ) {
- typename Foo res;
+template< typename Foo > void func( Foo val ) {
+ Foo res;
0130128NGNG
>129
�dクス。コンパイルとおりました。typenameがtemplate<>の中にしか書けないのは
C++の規格?それともgccの制限?
0131デフォルトの名無しさんNGNG
typenameはそれが型名だと確定できないとき以外はつけてはいけない
0132128NGNG
>131
あー、なるほど。その説明でスッキリしました。
ありが�d。

// intやdoubleとかにもtypename付けられるようになってると
// 文法の対象性が良くなる気がする。
0133デフォルトの名無しさんNGNG
>>132
たぶん誤解してる
typenameは以下のように使う
Fooの前のtypenameを外してコンパイルした結果と比較してみて
環境によってはtypenameはいらないようだけどg++(3系)だと必要
#include<iostream>
#include<string>
using namespace std;
template< typename Foo > void func( Foo val ) {
typename Foo::value_type res;
res = val.size () + val.size ();
cout<< res<< endl;
}
int main(void) {
func<string>( string( "String" ) );
return 0;
}
0134デフォルトの名無しさんNGNG
templateの引数にtypenameとclassの両方、
なんの違いも無く使えるのって、なんのため?
意思の表示?歴史的経緯?
0135128NGNG
えーと、typenameを使う主な場所は
・template< >の中
・ template<typename Foo>の有効範囲内で
  Foo::value_type のような型を使うとき
の2つで、
・型であることが明確なものにtypenameつけたらダメ
という理解で良いかな?
0136デフォルトの名無しさんNGNG
>>135
そんなとこかなぁ
0137デフォルトの名無しさんNGNG
>>135
・template<typename Foo>の有効範囲内で、
 std::vector<Foo>::iteratorのような型を使うとき
もだな。念のため。
0138デフォルトの名無しさんNGNG
>>134
歴史的経緯じゃないかと思っている
禿の予知能力がもう少し強ければ
初めから typename だっただろうさ
0139デフォルトの名無しさんNGNG
vectorやlist等を基本クラスで宣言したものに
派生クラスのオブジェクトを格納して
派生クラスでオーバーライドした関数呼び出すことってできないですか?


0140デフォルトの名無しさんNGNG
>>139
奇妙なテンプレートとかなんとか言うやつでやるかな、たぶん。
0141デフォルトの名無しさんNGNG
>>139
つまり、クラスに新たなメソッドが追加されたように振る舞わせるっていうこと?
0142139NGNG
様々な派生クラスのオブジェクトを格納して一括して処理できないかな
と思ったんですけど

派生クラスで格納するから、派生クラスのコンストラクタは呼び出されるんですけど
関数はオーバーライドしても基本クラスのものが呼び出されるんです

0143デフォルトの名無しさんNGNG
>>142
えーと、コンテナは基底クラスのポインタを格納していて、
んで、オーバーライドした関数を呼び出してるのに、基底クラスのものが実行される、
ってこと?
0144デフォルトの名無しさんNGNG
そのメンバ関数をvirtual指定してる?

とりあえず簡略化したソースでも見せて。
0145デフォルトの名無しさんNGNG
class A{
public:
 int x,y;
 A() {};~A() {};
 void Move() { x+=1; y+=1;};
};

class B:public A{
public:
 B() { x=0; y=0;} ~B(){};
 virtual void Move() { x+=2; y+=2; }
};

int main()
{
 vector<A> vec;  
 vec.push_back(B());
 vec[0].Move();
 cout << vec[0].x << vec[0].y;
 return 0;
} //結果11

簡略化というか別のソースなんですけど、こんな感じです

あと初心者スレ別にあったんですね。スマソ
0146デフォルトの名無しさんNGNG
>>145
とりあえずこんな感じ
deleteはちゃんとしてね
class A{
public:
int x,y;
A() {}; virtual ~A() {};
virtual void Move() { x+=1; y+=1;};
};

class B:public A{
public:
B() { x=0; y=0;} ~B(){};
virtual void Move() { x+=2; y+=2; }
};

int main()
{
vector<A *> vec;
vec.push_back(new B());
vec[0]->Move();
cout << vec[0]->x << vec[0]->y;
return 0;
} //結果11
0147デフォルトの名無しさんNGNG
>>145
出来ました ありがとうございます

ポインタを格納すればよかったんだ
0148147NGNG
間違えました>>146です
うう、すみません
0149デフォルトの名無しさんNGNG
>>145
派生クラスの方にvirtual付けてどうする。
仮想関数について勉強しなおすと吉。
0150デフォルトの名無しさんNGNG
会社で下のソースようなクラスの使い方している人がいて「一般的な使い方だよ」って言われたんですが
そうなんでしょうか?

かなり簡略したが、大体こんな感じ。
ttp://up.isp.2ch.net/up/68bafad0fbe0.lzh

年配の方に聞くと「ま、そういう人もいるよ。」って言ってましたが…
0151デフォルトの名無しさんNGNG
>>150
別に普通だと思うけどなにがマズイと思うの?
0152デフォルトの名無しさんNGNG
本当に一般的では無いと思ってるなら
TemplateMethodパターンでくぐって納得した後にデザパタの勉強しなさい。
0153デフォルトの名無しさんNGNG
なんなんだろ、この"見て損した"感は…
0154デフォルトの名無しさんNGNG
Template Method ってデザパタなんか微塵も知らなくても知ってて当たり前だと思うのだが
0155デフォルトの名無しさんNGNG
>>154
君は何で学んだの?
0156デフォルトの名無しさんNGNG
>>155
現場の知恵ってやつじゃないの?
0157デフォルトの名無しさんNGNG
そもそもデザインパターンは知ってて当たり前のものやよく使われてるものをカタログ化したものだからな。
0158デフォルトの名無しさんNGNG
>>154はデザパタをまったく理解してないに100香田
0159デフォルトの名無しさんNGNG
>>158
萎えそう思ったのか192文字以内で答えよ
0160デフォルトの名無しさんNGNG
>>159
2のべきにしろ
0161デフォルトの名無しさんNGNG
文字列の終端も数に入れてね
0162デフォルトの名無しさんNGNG
では終端のナル文字を含めて1024文字以内のC文字列で説明せよ
0163デフォルトの名無しさんNGNG
ロケールは?
0164デフォルトの名無しさんNGNG
C++なら終端なんか含むなよ。
0165デフォルトの名無しさんNGNG
説明をstd::stringに格納せよ。字数制限:メモリを使い果たすまで
0166150NGNG
>>151
いや、使い方はそうなんだが、ソース見て違和感しか思えなくて…
なんかあまりマネしたくない手法と言うか…「へー」としか感想無くて…
一般的かどうか聞いてみた。(気にするだけ無駄だったかのかな?)


他のレスもサンクス。
0167デフォルトの名無しさんNGNG
>>165
4GB 超のメモリを積んでるマシンでも size_t が 32bit だったりして
困るわけだが。
0168デフォルトの名無しさんNGNG
ちょっと見てみたが、何の変哲もないただのオーバーライドじゃん。
どんな解説書にも一回は載ってるような。
TemplateMethodでもないし。
0169デフォルトの名無しさんNGNG
>>128-138
ttp://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#382
0170デフォルトの名無しさんNGNG
TemplateMethodだから
0171デフォルトの名無しさんNGNG
TemplateMethodですから!!残念!!

GoF26パターン斬るぃ〜!
0172デフォルトの名無しさんNGNG
( ´д)ヒソ(´д`)ヒソ(д` ) GoF本は23パターンしかないぞ
0173デフォルトの名無しさんNGNG
>>150
ac_BaseStrがclassBaseとclassExtの両方に書いてある事だけは唯一気になる。
0174デフォルトの名無しさんNGNG
これのプログラムに問題はありますか?
#include <iostream>
struct base
{
  template<class T>bool _(T)
  {
    return false;
  }
};
struct derived: base
{
  bool _(char c)
  {
    return true;
  }

  bool _(int i)
  {
    return true;
  }

};
int main()
{
  derived d;
  std::cout << std::boolalpha;
  std::cout << d._(1.0f)<< std::endl;
  std::cout << d._('a') << std::endl;
  std::cout << d._(1) << std::endl;
  return 0;
}
0175デフォルトの名無しさんNGNG
>174
派生クラスで、同じ関数名でシグニチャが違う関数を宣言すると
基底クラスの関数は隠される。
derivedに using _;とでも書いておけ。

あとアンダースコアから始まる識別子を使うな。
0176デフォルトの名無しさんNGNG
C++ で
入力した文字を逆転表示して表示させるにはどうしればいいのでしょうか・・・?

例
こんにちは

はちにんこ

と言った具合です。
0177デフォルトの名無しさんNGNG
>>176はマルチなのでスルーしてください。
0178デフォルトの名無しさんNGNG
回答もらってるのにマルチとは言い度胸だな
0179デフォルトの名無しさんNGNG
>>176
自分で考えろヴォケ
0180デフォルトの名無しさんNGNG
C++Builderのスレがありません。・゚・(ノд`)・゚・。
0181デフォルトの名無しさんNGNG
wstring を出力させたくて
std::locale::global( std::locale( "japanese" ) );
std::wstring s;
std::getline( std::wcin, s );
std::copy( s.begin(), s.end(), std::ostream_iterator<wchar_t>( std::wcin ) );
としたのですが、copy のところで
error C2440: '型キャスト' : 'std::wostream' から 'std::ostream_iterator<wchar_t>' に変換できません。

となってしまいます。
std::wcout << s とするしかないでしょうか?
0182181NGNG
- std::copy( s.begin(), s.end(), std::ostream_iterator<wchar_t>( std::wcin ) );
+ std::copy( s.begin(), s.end(), std::ostream_iterator<wchar_t>( std::wcout ) );
0183デフォルトの名無しさんNGNG
std::ostream_iteratorの二番目のテンプレート引数をwchar_tにすればコンパイルは通るよ
0184デフォルトの名無しさんNGNG
>>181
マルチは帰れ
っていうかそれは宿題スレで私が答えた奴の再質問か?
0185デフォルトの名無しさんNGNG
標準入出力とロケールって関係あるの?
0186デフォルトの名無しさんNGNG
うん。
0187デフォルトの名無しさんNGNG
>>186
どんなの?
0188デフォルトの名無しさんNGNG
フォーマット付き出入力
0189デフォルトの名無しさんNGNG
>>188
そりゃそうだな
0190デフォルトの名無しさんNGNG
>>184
何だこいつ
0191デフォルトの名無しさんNGNG
>>190
なんだおまえ
0192デフォルトの名無しさんNGNG
>>192
なんだおまえ
0193vc++6.0NGNG
boostいれてみたんですが
Let's boost(ttp://www.kmonos.net/alang/boost/)
のサンプルintrusive_ptr以下のサンプルがうまくいきません

intrusive_ptr
c:\〜\intrusive_ptr.cpp(23) : error C2065: 'CountableObject' : 定義されていない識別子です。
c:\〜\intrusive_ptr.cpp(23) : error C2065: 'ptr' : 定義されていない識別子です。
c:\〜\intrusive_ptr.cpp(24) : error C2448: '<Unknown>' : 関数の定義が間違っています。
c:\〜\intrusive_ptr.cpp(29) : error C2448: '<Unknown>' : 関数の定義が間違っています。

lexical_cast
c:\〜\lexical_cast.cpp(12) : error C2062: 型 'int' は不要です。
c:\〜\lexical_cast.cpp(13) : error C2275: 'string' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
c:\program files\microsoft visual studio\vc98\include\xstring(612) : 'string' の宣言を確認してください。
cl.exe の実行エラー

というようになってしまいます。
c:\lib\boostの下にc++boost.gif等が来るようにして
インクルードファイルにc:\lib\boostを追加したんですが
0194デフォルトの名無しさんNGNG
std::multimapで重複するキーをinsertした時についてなんですが
例えば
std::multimap<int, int> m;
m.insert(std::pair<int, int>(1, 1));
m.insert(std::pair<int, int>(1, 3));
m.insert(std::pair<int, int>(1, 2));
m.insert(std::pair<int, int>(1, 4));
とし、イテレータで最初からアクセスした場合
キーが重複した部分がどういう順番で出てくるか
とかそういうのは決まっているんでしょうか?
0195デフォルトの名無しさんNGNG
>>193
intrusive_ptrはそのコードが間違ってる。
lexical_castはコンパイラが間違ってる。
0196vc++6.0NGNG
>>195
さんくす
0197デフォルトの名無しさんNGNG
>>194 決まってない。
0198デフォルトの名無しさんNGNG
fstreamで読み書きするとfopenで読み書きするよりだいぶ遅くなるのですが、
どうやったら解決しますか?
0199デフォルトの名無しさんNGNG
>>198
しゃーない。fstreamは継承しまくりの怪物だし、CのFILE構造体のような
機械語に近いライブラリには速度でどうやってもかなわんよ。

マシンを新しくするか、FILEを使い続けるかどちらかだな。
0200デフォルトの名無しさんNGNG
>>198
コード晒してもらえる?
0201デフォルトの名無しさんNGNG
>>198
自分でクラスを書く
0202デフォルトの名無しさんNGNG
>>200
長いのでちょっと難しいですが、

基本的には
fp = fopen(path , "rb")
↓
ifstream ifs(path, ios::in | ios::binary);

fread(&data, sizeof(Data), 1, fp);
↓
ifs.read((char*)&data, sizeof(Data));

fgets
↓
getline
と置き換えただけです。
0203デフォルトの名無しさんNGNG
速度の方ですがifstreamの方が4〜5割遅くなってしまっています。

readとfgetsはたくさんあってループもしています。
具体的には約10万程度のクラスインスタンスのシリアライズとデシリアライズを行っています。
それと、読込中に正しく読めてるか確認するための\0もあり、
fgetc
ifs.get
で確認しています。
0204デフォルトの名無しさんNGNG
>>202 最適化の影響は確認した?
0205デフォルトの名無しさんNGNG
>>204
最適化の影響の意味がよく分かりません。
最適化はon(-O2)にしています。
0206デフォルトの名無しさんNGNG
全部同じ値のテストデータとかでは無く
実運用データでテストしていてその後実際に読んだデータを元に処理を行っているので、
実際に読み込まないとかの最適化がかかることは無いと思います。
0207デフォルトの名無しさんNGNG
やっぱり>>199って事なんでしょうかね…
それにしても実際のIOにかかる時間の方が
iostreamの複雑さなんかよりずっとオーダーが大きそうなのに5割も違うのはなあ…
0208デフォルトの名無しさんNGNG
現在実行しているディレクトリのパスを取得する方法を教えてください。
OSはLinuxです。
0209デフォルトの名無しさんNGNG
>>208
ここって環境依存ありだっけ?
そうでないなら以後気をつけるようにってことで、getcwd()。
0210デフォルトの名無しさんNGNG
>>208
環境依存なしならboost/filesystem
0211デフォルトの名無しさんNGNG
すみません、神様教えてください。
下のソース、Mac の OSX 10.3.5 上で実行すると
::pthread_join で止まってしまいます。
CallProc の中身を while ( true ) ::pthread_testcancel();
のようにすると、ちゃんと join できるのですが・・
他の環境では動くのでしょうか?

#include<pthread.h>
#include<sys/socket.h>

#include<iostream>
using namespace std;
static void*
CallProc( void* p ) {
int wSS = ::socket( AF_INET, SOCK_STREAM, 0 );
::listen( wSS, SOMAXCONN );
::accept( wSS, NULL, NULL );
return 0;
}

int
main() {
pthread_t m;
::pthread_create( &m, NULL, CallProc, 0 );
::sleep( 1 );
::pthread_cancel( m );
void* v;
cout << "Calling join." << endl;
::pthread_join( m, &v );
cout << "Joined." << endl;
}
0212デフォルトの名無しさんNGNG
FILE*との同期を取るためのコストがでかくて性能が出ないって話がどこかにあった。
同期を行わないパラメタをifstreamに渡せばよかったはずだけど、覚えてない。
0213デフォルトの名無しさんNGNG
>>212
std::ios::sync_with_stdio()だろ。それにfalseを与えてパフォーマンスの
変化があるかどうか調べてみ。
0214デフォルトの名無しさんNGNG
C++ ではポインタに代入するとき NULL と 0 のどちらを使った方がいいのでしょうか?
0215デフォルトの名無しさんNGNG
>>214
0です。そういうことになってます。
0216デフォルトの名無しさんNGNG
漏れの手元の本には
プラットフォームに応じてNULLの定義方法が異なっていたことにより
プログラムが暴走する危険があった、と書かれてる

例えば
#define NULL ((char *)0)
#define NULL ((void *)0)
など。で、これを代入するとエラーがでる可能性がある
C *cp = NULL; //エラー?
ちなみにC++では数値の0は任意の型のポインタ値に変換できることが保証されている
よって、0が一般的に使われている

けど、現在のC++の標準には(void *)0のような定義は許可されていないので
その標準にのっとった環境であればNULLを使用しても問題ない

ただ、やっぱり今のC++プログラマはNULLではなく、0を利用するのが一般的、らしい

自分の言葉じゃなくてスマソ
今漏れも勉強中なんだわ
0217デフォルトの名無しさんNGNG
>>216
昔の話だから忘れて良い。

ANSI C++ の規格では NULL は「整数型で値は 0 と等しい」(回りくどい言い方に
なってるのは int, long, ... どれになるかは処理系に任してるから) と定義されてる。

C* cp = NULL;

これが通らないコンパイラは、現実にはそろそろゴミ箱行き。
0218デフォルトの名無しさんNGNG
NULLより0の方がタイプ数が少なくてグッド
0219デフォルトの名無しさんNGNG
C++よりRubyの方がタイプ数が少なくてグッド
0220デフォルトの名無しさんNGNG
>>219
激しく同意させてもらう。
0221デフォルトの名無しさんNGNG
>>217
> 回りくどい言い方になってるのは int, long, ... どれになるかは処理系に任してるから

君はぬるぽを知っているのか?
Cのぬるぽをわかっているか?
0222デフォルトの名無しさんNGNG
C++における、Cの負の遺産の一覧、みたいなのありますか?
0223デフォルトの名無しさんNGNG
>>222
ISO/IEC 14882 の Annex C から以後は読んだか?
英語が辛ければ JIS に日本語版もあるぞ
0224デフォルトの名無しさんNGNG
>>222 みたことない。
0225デフォルトの名無しさんNGNG
えー?ANSI版みたいに1980円くらいでしかも日本語の香具師キボンヌ
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?bunsyoId=JIS+X+3014%3A2003&dantaiCd=JIS&status=1
0226デフォルトの名無しさんNGNG
>>225
まあ投資額は目的・目標で決めることだからな
なくていいんならそれまでだ
0227デフォルトの名無しさんNGNG
int hoge = 0;
int* hoge = 0x0;

じゃだめですか?
0228デフォルトの名無しさんNGNG
>>227 だめです。
0229デフォルトの名無しさんNGNG
>>227
OKです。
0230デフォルトの名無しさんNGNG
じゅうぶんです
0231デフォルトの名無しさんNGNG
はんぶんです
0232デフォルトの名無しさんNGNG
>>227
('∀`)<あなたを、犯人です
0233デフォルトの名無しさんNGNG
ていうかコンパイルが通らない。
0234おながいしまつNGNG
342 :VC++ですが・・・ :04/11/04 00:32:25 ID:hMyxAB0U
-----------------------------------------
pDocTemplate = new CMultiDocTemplate(
IDR_TEST11TYPE,
RUNTIME_CLASS(CTest1103Doc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CTest1103View));
AddDocTemplate(pDocTemplate);
-----------------------------------------
↓↓↓

RUNTIME_CLASS(); ←この呪文は、ひとことで言うと何ですか?

C言語の初心者ですいません。
javaは一生懸命勉強したのですが、
VC++の呪文に不慣れです。
そこで諸先生がたに伺いました。難しければ結構です。。。

346 :cen ◆Pm9xOTJuM. :04/11/04 00:34:06 ID:???
>>342
ここを。
プログラム
http://pc5.2ch.net/tech/


↑↑↑
というわけで御座います。
基本的な呪文を10個くらい意味と一緒に覚えておきたいと思います。
0235デフォルトの名無しさんNGNG
>>234
ひとことで言うと、MFCのマクロ。
0236デフォルトの名無しさんNGNG
C++の新バージョンって、いつごろ出るの?
0237デフォルトの名無しさんNGNG
>>236
hageに訊いてください。
0238bjarneNGNG
シラネ
0239デフォルトの名無しさんNGNG
すいません。質問なんですが、
C言語には無くてC++にだけは存在する
プリプロセッサへの命令(ディレクティブ)って何かありますか?

CとC++ってこの部分は同じでしたよね?
0240デフォルトの名無しさんNGNG
プリプロセッサディレクティブなんて激しく環境依存じゃねぇの?
0241デフォルトの名無しさんNGNG
>>240 いいかげんなこというなよ。
0242デフォルトの名無しさんNGNG
ソースって一つのクラスごとに一つ作るのがいいんですか?
0243デフォルトの名無しさんNGNG
>>242
一般的には。
ただ、数行〜十数行程度の小さいクラスがぽこぽこ出来るときはある程度まとめる。
0244デフォルトの名無しさんNGNG
>>242
基本的にはそれが一番。
0245デフォルトの名無しさんNGNG
質問者より回答者の方がレベルが低いスレはここでつか?
0246デフォルトの名無しさんNGNG
全部ひとつのヘッダに書くべき
0247デフォルトの名無しさんNGNG
>>246
それじゃ再利用しにくくない?
0248デフォルトの名無しさんNGNG
>>242
間違っても一つのクラスでファイルを分けたりするなよ。
ソースを追いにくくなるから。
定義と宣言は一カ所でしろ。
Javaから入った漏れには当たり前のことなんだが、
世の中には訳分からん無駄な作業をする奴もいるな。
0249デフォルトの名無しさんNGNG
>定義と宣言は一カ所でしろ。
この行を読んだ瞬間ネタだと分かった
0250デフォルトの名無しさんNGNG
>>249
遅すぎ。1行目で気づけよ。
0251デフォルトの名無しさんNGNG
>>247
どうせしないって
0252デフォルトの名無しさんNGNG
>>248
> 定義と宣言は一カ所でしろ。

ハァ? 実装を修正するたびにインクルードされてるファイルも毎回コンパイルするんかい。
0253デフォルトの名無しさんNGNG
メール欄みただけで釣りだと分かった
0254デフォルトの名無しさんNGNG
ネタかよw
0255デフォルトの名無しさんNGNG
>>250
遅すぎ。読む前に感覚的に見てJavaという4字があった瞬間にネタだと分かれよ。
0256デフォルトの名無しさんNGNG
大したことない設計しかしていない初心者は、1ソ−スに複数記述してもいいでしょう。
でも複数人でプロジェクト組むなら、1ソース1クラスが良いでしょう。
お遊びじゃないんだから。
0257デフォルトの名無しさんNGNG
>>242
間違っても一つのクラスで一つのファイルなんて制限するなよ。
ソースを追いにくくなるから。
同じクラスでもグループごとに別ファイルにしたり、ユーザーが読むべき部分と読むべきでない部分は別ファイルにしろ。
C#から入った漏れには当たり前のことなんだが、
世の中には訳分からん無駄な作業をする奴もいるな。
0258デフォルトの名無しさんNGNG
>>242
間違っても一つのクラスで一つのファイルなんて制限するなよ。
ソースを追いにくくなるから。
一つのプログラムは全部一つのファイルにまとめて書け。
ハンドアセンブルから入った漏れには当たり前のことなんだが、
世の中には訳分からん無駄な作業をする奴もいるな。
0259デフォルトの名無しさんNGNG
もうネタはいいよ。本当に知りたい人が読んだら勘違いするだろ。
0260デフォルトの名無しさんNGNG
マジかよ
0261デフォルトの名無しさんNGNG
じゃぁまとめよう
一つのプログラムは全部一つのファイルに…



ゲフンゲフン
0262デフォルトの名無しさんNGNG
>>261
ちゃうがな
0263デフォルトの名無しさんNGNG
1クラス1ファイルとかってファンクタの類でも貫いてたらある意味尊敬するな。
0264デフォルトの名無しさんNGNG
>>263
それはさすがにやらんな。
0265デフォルトの名無しさんNGNG
>>263
もちろんインナークラスも別ファイルに分けて #include します。
0266デフォルトの名無しさんNGNG
>>242
>ソースって一つのクラスごとに一つ作るのがいいんですか?

Cの頃はstaticやexternでシコシコ書くしかなくて
ファイルの分割が即スコープの分割を意味してたから
C++になっていまだにそういう迷信を信じている人も多い
0267デフォルトの名無しさんNGNG
1ファイル1クラスにしたらどのクラスを探すのが楽やん
0268デフォルトの名無しさんNGNG
俺も興味あるんだけど、結局どっちがいいんだ…「適度に」って言う曖昧なのが一番なのか。
今のところ建設的っぽい意見

・一般的には1クラス1ソースだが、小さいクラスが多いときはある程度まとめる
・再利用しにくいから1クラス1ソース
・実装を修正するたびにインクルードされてるファイルを毎回コンパイルしないために1クラス1ソース
・1クラス1ソースは、ファイルの分割が即スコープの分割を意味していたCの頃の迷信
0269デフォルトの名無しさんNGNG
>>268
というか、関連が比較的強いクラスはまとめる。
長くなるようなら分割する。
コンパイルの際のファイル依存は極力減らす(PImplイディオムまではいかなくても)

でいいんじゃないの
0270デフォルトの名無しさんNGNG
>>269
うーん、サンクス。となると例えば手元にある「コンポジットのクラスが
まとめられてる長いソース」は分割対象かなぁ。

実用で言ったら依存関係だけ考慮すれば良さそうだけど、
そうもいかないだろうしねぇ。
0271デフォルトの名無しさんNGNG
原則論的な話をするとキリがないけど、モノを作り上げる効率性
を考えたら、1ソース1クラスで作ると決めたほうが、はるかに
効率が良い場合がほとんどですね。プロジェクトの分担がし易い
し、誰かが改良をしている時に、ほかの人が手を入れられない、
ということがなくなるし。

そもそも、ソース長すぎて分割しなくてはならない、
ってのは、ソフト業界で生きていくレベルにないね。。。
設計がなってないにもホドがある、ゾ・・・
0272デフォルトの名無しさんNGNG
記念マキコ
0273デフォルトの名無しさんNGNG
大阪(西梅田)、新宿(JR駅前)のそれぞれ一等地に
拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/

応援するスレはこちら!
http://school4.2ch.net/test/read.cgi/job/1077432387/

最高の会社にするため、みんな頑張ってます!

0274デフォルトの名無しさんNGNG
とあるクラスのメンバ関数の振る舞いについて質問です

int &Hoge(){
int mage = 0;
return mage;
}

とするとやはり危険なんですよね?
これを解決するために
1.mage を static int にする
2.メンバ変数として int mage を作っておく

Hoge を呼び出す側に変数を用意しておいて
Hoge に参照渡しするのが無難だと思いますが
上記の1,2の方法が問題ないのであれば、どちらがいいのでしょうか?
0275デフォルトの名無しさんNGNG
コピーコンストラクタがあれば問題なし
0276デフォルトの名無しさんNGNG
>>274
1 と 2 では意味が全然違うが?
0277デフォルトの名無しさんNGNG
>>275
コピーコンストラクタをどのように用いればよいのでしょうか?

>>276
揮発性という観点で1,2を挙げたのですが
その違いというのも教えていただけないでしょうか
0278デフォルトの名無しさんNGNG
int Hoge() { ... }
0279デフォルトの名無しさんNGNG
>>277
#include <iostream>
using namespace std;
class foo {
  int mage;
public:
  foo() : mage(0) {}
  int& Hoge() {return ++mage;}
};
class bar {
public:
  int& Hoge() {
    static int mage = 0;
    return ++mage;
  }
};

int main () {
  foo f[2];
  bar b[2];
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 3; j++)
      cout << f[i].Hoge() << ' ';
  cout << endl;
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 3; j++)
      cout << b[i].Hoge() << ' ';
  cout << endl;
  return 0;
}
0280デフォルトの名無しさんNGNG
>Cスレの方でも書き込んだのですが、一応こっちも
あるクラスにbuf[4][128]という配列があり、これを単なる外部関数
で使いたいのですが、このアドレスをメンバ関数で取得するには
どう書けばよいのでしょうか?とりあえずこうしてみたのですが 駄
目でした。
class A
{
buf[4][128];
char** getBuf(void) { return (char**)buf; };
}
int main(void)
{
char **ptr;
ptr = classA->getBuf();
ptr[3][100]=100;//ここでハングアップ
}
0281デフォルトの名無しさんNGNG
>>280
とりあえずコンパイルできる形にしてから載せろよ…
0282デフォルトの名無しさんNGNG
これでどうでしょう?
class AAA
{
private:
char buf[4][128];
public:
char** getBuf(void) { return (char**)buf; };
};
int main(void)
{
AAA aaa;
char **ptr;
ptr = aaa.getBuf();
ptr[3][100]=100;//ここでハングアップ
}
0283デフォルトの名無しさんNGNG
メモリレイアウトを考えろ
[0,0]...[0,127][1,0]...[1,127][2,0]...[2,127][3,0]...[3,127]
#include <iostream>
class A
{
public:
  char buf[4][128];
  char* getBuf(void){return (char*)buf;};
  void print(){std::cout << (buf[3][100] & 0xff) << std::endl;}
} classA;
int main()
{
  char *ptr;
  ptr = classA.getBuf();
  *(ptr + 3 * 128 + 100) = 100; // ここでハングアップ
  classA.print();
}
}
0284283NGNG
あ、ごめん、最後の}が余計
0285デフォルトの名無しさんNGNG
返答有難うございます。
*(ptr + 3 * 128 + 100) = 100; // ここでハングアップ
これはこの形でないと駄目ということでしょうか?ptr[][]の
形でアクセスする方法はないのでしょうか?
0286デフォルトの名無しさんNGNG
>>285
char* ptr; を char (*ptr)[128];に替えればいいだろ。
0287デフォルトの名無しさんNGNG
あ、なるほど!ポインタ変数を変えるのですね。関数の戻り値を
変えることばかり考えて、そっちは気づきませんでした。
これで解決できそうです。ちょっとやってみます。
0288デフォルトの名無しさんNGNG
>>287
関数の戻り値も変えられるけど?
286とまったく同じ構文で。
0289デフォルトの名無しさんNGNG
>>280
> Cスレの方でも書き込んだのですが

いやそれマルチだから
お前ら親切ですね
0290デフォルトの名無しさんNGNG
マルチすみません。

>関数の戻り値も変えられるけど?
はい、それを最初に試して、こんな感じにしてみたんですが
コンパイルエラーになります。
char(*)[128] getBuf(void){ return (char*)buf; };
(char(*)[128]) getBuf(void){ return (char*)buf; };

どういう風に書けばよいのでしょうか?
0291デフォルトの名無しさんNGNG
>>290
char (*getBuf(void))[128];
あるいは
typedef char (*BUF)[128];
BUF getBuf(void);
0292デフォルトの名無しさんNGNG
char (&getBuf(void))[4][128]{ return buf;}
のほうが良いとおもゆ
0293デフォルトの名無しさんNGNG
>>291
>>292
試してみました。上手くいきました。

これで完全に解決しました。マルチに最後にまで付き合って
もらってすみません。勉強になりました。
0294デフォルトの名無しさんNGNG
class A {
protected: void a() {}
};

class B : public A {
public: void b(A& a) { a.a(); }
};

というコードが vc7.1 で
error C2248: 'A::a' : protected メンバ (クラス 'A' で宣言されている)にアクセスできません。
というエラーになるのですが、これは c++ 標準の仕様なのでしょうか?
0295デフォルトの名無しさんNGNG
yes
0296デフォルトの名無しさんNGNG
>>294
this->a()しか呼び出せないよ。
0297デフォルトの名無しさんNGNG
>>294
やってることを理解してない模様。
0298デフォルトの名無しさんNGNG
基本的な事で素朴な質問なんですが、
test.h で、
struct test {
int a;
int b; };
class test2 {
int c;
int d;
SetC(int i);
SetD(int i);
GetC(void);
GetD(void); };
という宣言がなされていて、
test.cpp で、
#include "test.h"
int main(void) {
int sum;
struct test t;
t.a = 0;
t.b = 0;
sum = t.a + t.b;
printf("%d\n", sum)
return 0; }

というような(あまり意味のない)コードを作ったとします。
これをコンパイルした時、test.hのclass test2の方の
内部実装が未定義のSetC,SetD,GetC,GetDやclass test2
自体はどうなっちゃうのでしょうか?test.cの方でclass test2
を使ってなければコンパイルエラーにはならないですが、
実際に出来上がった実行形式ではclass test2の部分の定義
はコンパイラが削除してしまうのでしょうか?
0299デフォルトの名無しさんNGNG
>>298
そもそも無いのだから削除する必要も無いのでは?
0300デフォルトの名無しさんNGNG
>>296
class B : public A {
public: void b(B& b) { b.a(); }
};
これなら呼び出せるんだよ〜ん。
protectedメンバはthisを含め自分自身と同じ型のポインタ/参照ならアクセス可能。
0301デフォルトの名無しさんNGNG
プログラミング言語C++第三版P108の上から二行目の
「しかし、正の整数を表現するためのビット数を一つ増やしたいために
int の代わりに unsigned を使うのは、ほぼ確実によくない」
のところが良く分かりません…これってどういうことなのでしょうか…?
0302デフォルトの名無しさんNGNG
「C/C++で unsigned (int以上)を使うのは、ほぼ確実によくない」
に読み替えてかまわないと思うよ。
0303デフォルトの名無しさんNGNG
でも理由が自分には良く理解出来ないので気持ち悪いです。
「値を正に保つために unsigned を宣言しても、暗黙の型変換
ルールがあるので、目的を達成出来ない」
ってあるけどこれ読んでも、値は正に保たれてるから別にいいのでは?
と思ってしまうのですが…
0304デフォルトの名無しさんNGNG
>>303
前半は、たかが1ビット稼ぐために、unsignedを導入することによって発生する多大なデメリットは割に合わない。
後半は、文脈が分からんので知らん。
0305デフォルトの名無しさんNGNG
>>301
そんなん用途によるがな。
いろんな型の欠点ばっかり言い出したら
それこそ使てええのん残らんで。

ただsignedとunsignedの不注意な混用は
ハメられて痛い目見るケースがよくあるから
くれぐれも気をつける癖をつけれちゅうんなら
俺もそう思う。
0306デフォルトの名無しさんNGNG
でかいクラス(Form等)を1つのクラスで
複数のソースファイルに分割するというのは一般的に良く行われる事なのですか?
form.hでFormクラスを宣言して、
formcontrols.cppとformevents.cppとforminit.cppで定義を行うというような事です。
0307デフォルトの名無しさんNGNG
>>306
一般的、とあるんでイヤだと答えるが・・・
そのケースの事情を見ずに言ってることなんで
声のトーンはごく控えめにしとく

ヘッダとソースとインラインに分けてるのはときどき見かけるなあ

それから「でかい」って何を基準に言ってるのかな?
数千行程度なら全然「でかい」うちに入らんぞ
たとえ数百行程度でも「でかい」と感じることもあるが
わかるか? ライン数やバイト数じゃねえってことだ
0308デフォルトの名無しさんNGNG
普通1メソッド1ファイル
0309デフォルトの名無しさんNGNG
1プログラム1ソースという結論が他の全てを論破したはずだが?
0310デフォルトの名無しさんNGNG
おぞましい結論だな
0311デフォルトの名無しさんNGNG
・1つのプロシージャの行数、
・ローカル変数のスコープ範囲、
・命名規則の一貫性の程度
で体感的なファイルの大きさは変わるな。
0312デフォルトの名無しさんNGNG
下記のようにコーディングして、テキストファイルを読み込むと、
当然読み込んだデータの末端に余計な改行が入るのですけど、
不要な改行を付加することなく、スマートに
テキストファイルを読み込む方法はないでしょうか?

Open TextFilePath For Input As #1
Do Until EOF(1)
Line Input #1, Temp
ReadData = ReadData & Temp & Chr(13) & Chr(10)
Loop
Close #1
Text1.Text = ReadData
0313デフォルトの名無しさんNGNG
>>312
そんなえさで(ry
0314デフォルトの名無しさんNGNG
スレ違いだボケ
0315デフォルトの名無しさんNGNG
>>312
http://pc5.2ch.net/test/read.cgi/tech/1080569567/
0316デフォルトの名無しさんNGNG
--a.cc--
extern void func1(void);

int main(){
...
func1();
}

--b.cc--
extern func2(void);

void func1(void){
...
func2();
}
--c.cc--
void func2(void){
...
}

という3つのファイルがあって,g++ a.ccをするとundefined reference to func2()
がでるのですが,何がいけないのでしょうか?
0317●NGNG
>>316
g++ -c a.cc
0318デフォルトの名無しさんNGNG
ゼルダ
0319デフォルトの名無しさんNGNG
>>317
なるほど,了解しました.ありがとうございました.
リンクする前にとめればいいんですね.
0320デフォルトの名無しさんNGNG
C++は「なんだって出来る」言語だけれど、
何を作るかによって設計を変えないとやっていけない。
クラス設計が関わるレベルであれば、オブジェクト
指向で設計しないと使えないヤツになってします。
アドレス渡しなんてやっていたら・・・オソロシイィィ
でも組み込み機器の設計や、リアルタイム制御の世界
だったら、まだまだポインタは必要だけどね。
トンカチで釘打つ時にトンカチに釘接着してから
木に打ち込もうとしたら、技術のレベルが知れるわね。
0321デフォルトの名無しさんNGNG
そこでRubyですよ
0322デフォルトの名無しさんNGNG
ところでこのRubyのひとって複数いるの?
0323デフォルトの名無しさんNGNG
漏れも思った
一人であちこち巡回してるのかと思うと、
相当なアンチRubyなんだろうなって思う



明らかにRubyに対し悪いイメージしか残してないからなw
0324デフォルトの名無しさんNGNG
そこでRubyですよ
0325デフォルトの名無しさんNGNG
計算機言語には得手不得手があるからなぁ。
なんでもかんでもC++ってわけにもイカンのはたしかだ。

それでもパフォーマンスとOO設計の両方を兼ね備えたのなんざ
C++とEiffelくらいしか無いからね。
0326デフォルトの名無しさんNGNG
そこでRubyですよ
0327デフォルトの名無しさんNGNG
Rubyで物理計算やらせると終わらないので却下です
0328デフォルトの名無しさんNGNG
このスレは監視されているっ……
0329デフォルトの名無しさんNGNG
誰にだよ〜>>328
0330デフォルトの名無しさんNGNG
オレオレ、俺だよ、ばあちゃん
0331デフォルトの名無しさんNGNG
>>325
C++はともかく
- OCaml
- Objective C
- Delphi
を出さずにEiffelを出すのは何で?
Eiffelはパフォーマンスが要求される所で実績あったりするの?
0332デフォルトの名無しさんNGNG
>>331
別に深い意味はないよ、自分で選んだ結果として書いてるだけ。
あげてもらった言語に対しては
ObjectiveC:嫌いではない、Next使ってた頃はすごく重宝した
Delph:環境がWindowsしかない、すごく良くできているのにもったいない
OCaml:ごめんなさい、評価もしたことないのです

なんだよね、Eiffel入れたのは自分が使ったことがあって速度の問題もそれほどでなかったからなんだよ
でも大意としての機械言語には向き不向きがあるって事は了解してくれているんだよね?
0333325NGNG
補足:
ClosとかCommonLispが自分は好きだけどチームからは不評なんです。
0334デフォルトの名無しさんNGNG
>>332
Next は NeXT と書いてくれ
0335デフォルトの名無しさんNGNG
>>332
DelphはDelphiと書いてくれ
0336デフォルトの名無しさんNGNG
>>332
レスどうも
いろんな言語の経験がお有りなんですね
Eiffel使いなんて珍しいなと思って聞いてみました
向き不向きの話は同意です
最近R(S言語)の関数をC++に移植してるんですが
S言語はお気楽すぎて作業が大変です
0337デフォルトの名無しさんNGNG
>>332
つっこみどころが多いな!
0338デフォルトの名無しさんNGNG
>>337
現につっこめてねえヒヨッ子がはったりかましてんじゃねえw
0339デフォルトの名無しさんNGNG
Eiffelは、関数の部分型関係が引数に対してcovariantなのが分かりづらい。
0340デフォルトの名無しさんNGNG
>>339
そんだけ混乱してりゃ解りづらいのは道理だなw
0341デフォルトの名無しさんNGNG
>>338
>>334-335
0342デフォルトの名無しさんNGNG
>>341
なるほど、そういうことか
0343デフォルトの名無しさんNGNG
コンストラクタの書き方で悩んでいます。

派生クラスのコンストラクタで受け取った引数を少し加工してから、
基底クラスのコンストラクタに渡してやりたいのですが、
記述方法がわかりません。書く方法あったら教えていただけないでしょうか。
0344デフォルトの名無しさんNGNG
struct d : b {
d(int a) : b(a + 1) { }
};
0345デフォルトの名無しさんNGNG
>>344
ありがとうございます。助かりました。
0346デフォルトの名無しさんNGNG
Objective C は Objective-C と書いてくれ
0347デフォルトの名無しさんNGNG
ということは Objective-C = Objetive となるの?
0348デフォルトの名無しさんNGNG
>>347
operator-はオーバーロードされてません!残念!
0349デフォルトの名無しさんNGNG
'c' - 'C' == ' '
だと思うがどうよ
0350デフォルトの名無しさんNGNG
質問です。
データ読み込み関連のクラスでデータを拾ってきて使おうとすると
クラスが層みたいになってるので、どうしても

hoge->getHoge()->getHogeHoge(hoge->getHogeNo())->getHogege()->getString(hoge->getHogeHogeNo()).c_str()
とか長くなってしまいます。
こういうときはどう組んだらよいのでしょうか?
0351デフォルトの名無しさんNGNG
get関数の中でget関数を呼べば?
0352デフォルトの名無しさんNGNG
>>351
なるほど。
ありがとうございました。
0353デフォルトの名無しさんNGNG
typedef double (*FUNCTION)(double, double );
は何を意味しているんですか?
初心者です。よろしくお願いします。
0354デフォルトの名無しさんNGNG
二つのdouble型を引数に持ち、戻り値もdoubke型の関数ポインタを型定義している。
0355デフォルトの名無しさんNGNG
typedef double (*FUNCTION)(double, double)[20];
は何を意味しているんですか?
0356デフォルトの名無しさんNGNG
syntax error です。
0357デフォルトの名無しさんNGNG
コンストラクタの呼び出しについてなんですが、皆さんは
T t(tt); // 髭推奨
T t = tt; // 禿推奨
のどちらがいいと思いますか?
0358デフォルトの名無しさんNGNG
配列のポインタを返す関数をtypedefするのはどうするの?
0359デフォルトの名無しさんNGNG
わざわざtypedefする意味あんの?
0360デフォルトの名無しさんNGNG
>>357
コンストラクタをexplicit宣言しておくと微妙に差が出るな。
0361デフォルトの名無しさんNGNG
int main()とvoid main()は何がどう違うんですか?
0362デフォルトの名無しさんNGNG
>>361
バッチファイルなどのスクリプトから子プロセスとして呼び出した時、戻り値を使えるかどうかの違い。
Windowsのシステム環境変数 「errorlevel」とか、Unixのシェル変数 「$?」で戻り値を取得可能。

バッチの例:
hoge.exe
echo %errorlevel%
0363デフォルトの名無しさんNGNG
>>362
説明不充分。voidだと使えないのではない。不定値になるのだ。
0364デフォルトの名無しさんNGNG
CUIのプログラムの場合はプログラムの始めと終りが大事なんだけど
GUIの場合ほとんどウインドウ開いて閉じるだけの意味しかない。
Windowsしか知らないでCUIプログラム作ってると意味わかんないだろう。
0365デフォルトの名無しさんNGNG
>>363
お前はとりあえず、日本語の勉強しろ。

例としてあげるならば、「使えない奴だな。」は、奴が使用不能であることを指すのではない。
使っても物の役に立たないという意味だ。使う自由はあくまでユーザにある。
お前が日頃から言われていることだからすぐに理解できるだろう。な?
0366デフォルトの名無しさんNGNG
>>365
切れどころがわかんね┐(´〜`)┌
0367デフォルトの名無しさんNGNG
句読点の使い方をもっと勉強しましょう。
0368デフォルトの名無しさんNGNG
まぁ363は揚げ足取りに見えるな
文頭が「補足で〜」とかなら頭良い人に見えるのに
0369デフォルトの名無しさんNGNG
>>358
typedef int (*(*FUNCTION)())[];
0370デフォルトの名無しさんNGNG
揚げ足の取り合いは醜いポ(´・ω・)y--oO○ エトー・・・
0371デフォルトの名無しさんNGNG
クラスで使用する定数をVC++6.0で定義しようとしたら
static const int HOGE=0;
ができないらしいので、enumで代用しました。
文字列定数を使う場合はどうやればいいでしょうか

VC++6.0を窓から投げ捨てる以外の方法を教えてください
0372デフォルトの名無しさんNGNG
古いC++コンパイラは糞ばっかだからなぁ。
買い換えましょう。
0373デフォルトの名無しさんNGNG
>>371-372
そのクラス宣言内での初期化ができるのはISOでも整数型だけと決まっている。
というわけで普通の静的メンバと同じようにしろ。
//ヘッダ
class Foo
{
  static const char * const HOGE;
};
//cppファイル(1ファイルでだけ)
const char * const Foo::HOGE = "Hoge";
0374デフォルトの名無しさんNGNG
>>371
ワラタ
お前が飛び降りれば良いだろw
0375デフォルトの名無しさんNGNG
class foo
{
public:
static const int hoge;
};
const foo::hoge = 0;
0376371NGNG
>>373
なるほど。そうだったんですか
ありがとうございました
>>372さんも微妙にありがとう
0377デフォルトの名無しさんNGNG
>>371
VC6はARM仕様、ISO/IEC14882と違うつーて騒ぐ池沼は適正なし
0378デフォルトの名無しさんNGNG
>>377
GCCこそが標準でありISOは糞である!
そこんとこ間違えないように!
0379デフォルトの名無しさんNGNG
>>378
GCC はウンコです。
http://pc5.2ch.net/test/read.cgi/tech/1095583235/528-
0380デフォルトの名無しさんNGNG
>>361
void main() は規格外。
0381デフォルトの名無しさんNGNG
変数のスコープや使われ方が分かりやすくなるように
いきなりブロックを書いて無理矢理スコープを制限したり
してるんですが、なんだか美しくない気がします。
こういうことは普通にやるものなのでしょうか?

↓こんな感じです
{
    int a1, a2
    if (a1 < a2) return -1;
    if (a1 > a2) return +1;
}
{
    int b1, b2;
    if (b1 < b2) return -1;
    if (b1 > b2) return +1;
}
0382デフォルトの名無しさんNGNG
swich - case の中でローカル変数使いたいときはよくやる

switch(式){
case 1:
{
 int a = 1;
 printf("%d\n", a);
}
default:
{
 int a = 2;
 printf("%d\n", a);
}
}
0383デフォルトの名無しさんNGNG
default: の前に break; 忘れてる
0384デフォルトの名無しさんNGNG
>>381
たまにやる。
古いCではローカル変数をブロック途中で新しく定義するために使う。
C++ではデストラクタのタイミングを調整するために使ったりする。

関数に分けてすっきりした名前が付くなら、分けたほうがいい。
0385381NGNG
>>382
自分もそれはやるんですが、やっぱ>>381はさすがに
冗長?というか余計なお世話なのかなあ、と。
自分的にはブロックで囲むと
{ // hoge する
     /* ... */
}
みたいな感じでコメントも分かりやすくなるのでは?
と思ってたりするのですが、これがほとんどなされない
ような書き方ならば逆に読みにくくなるかもしれないので
やめた方がいいのかと。
0386デフォルトの名無しさんNGNG
>>381
普通にやる。むしろ推奨。
最終的にリファクタリングで関数に切り出せることを暗示している。
0387デフォルトの名無しさんNGNG
>>384-385
ttp://www.tietew.jp/cppll/archive/7539
0388デフォルトの名無しさんNGNG
>>385
確かに古い書き方の人は殆どやらないようだが、スコープがはっきりするので私もお奨め。
例えばこういうケースはfunc()を他人が作る場合にしばしばおきるので。
void myFunc()
{
int x, y;
...;
x = ...;
...;
y = ...;
int rtn;
{
struct ForFunc tmp = {x, y};
rtn = func(tmp);
}
switch (rtn) {
case FuncRtnOk:
...;
break;
case FuncRtnError:
default:
...;
}
}
まぁ、C++ならブロック化しなくてもすむんだけどね。
0389デフォルトの名無しさんNGNG
無名名前空間内の関数って名前空間内で定義しないとダメなんですか?
0390デフォルトの名無しさんNGNG
map をキーではなく値でソートさせるようには出来ないのでしょうか?
0391デフォルトの名無しさんNGNG
>>390
キーと値を逆にしたものを持てばいい。
0392デフォルトの名無しさんNGNG
>>389
その通り。
0393デフォルトの名無しさんNGNG
>>390
最新版のboostには複数要素を基準にソートできるコンテナが入る。
0394デフォルトの名無しさんNGNG
int* p_ = 0;
void reg(int* p) { p_ = p; }
void foo() { ++(*p_); }

int i = 0;
reg(&i);
std::cout << i << std::endl;
foo();
std::cout << i << std::endl;

とした場合、iが最適化でfoo()前後で同じ値が使われるということはあるのでしょうか?
0395デフォルトの名無しさんNGNG
ないんじゃね?もし何か具体的にコンパイラの挙動を疑っているの
ならばそのコンパイラを晒した方がレスが早そうだが。
0396394NGNG
>>395
ttp://forums.belution.com/ja/cpp/000/009/26.shtml
ここの・ライブラリに関連ってとこでそんなことが書いてあったのですが
もしこういう最適化をされたら面倒だなと思ったのです。
0397デフォルトの名無しさんNGNG
>>396
エイリアスを使わないと仮定するとか
そういうようなコンパイルオプション使うとそうなります。
0398デフォルトの名無しさんNGNG
>>394
標準関数でない関数呼び出しの前後で、完全ローカル(*)でない変数が同じであることは期待しないで最適化するはず。
つまり、きちんと違う値が出力されるはず。
#完全ローカルと書いたが、要はアドレス参照されてないローカル変数。
0399394NGNG
>>397
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_.2f.oa.2c_2f.ow.asp
これのことですね。
>>395, >>397-398
よくわかりました。ありがとうございました。
0400デフォルトの名無しさんNGNG
class Hige{
};

class Hoge:public Hige{
};

class Mage:public Hoge{
private:
std::vector<Hige> hige;

public:
Mage(){
hige.push_back( /* ここにHogeが持つclass Higeを入れたい */ );
}
};

このようなことが実現可能でしたら、その方法をご教授ください。
よろしくお願いします。
0401デフォルトの名無しさんNGNG
自分の基底クラスへのポインタがほしいと言うことか?
0402デフォルトの名無しさんNGNG
>>400
vectorの中身がポインタではないのでコピーになっちゃいますよ?
0403デフォルトの名無しさんNGNG
たぶんそのことだと思います^^;

Mageに継承したHogeの、さらに継承元のHigeを
higeに格納したいのですが…
0404デフォルトの名無しさんNGNG
やっぱポインタじゃないと直接アクセスは無理ですか…^^;

つまり
std::vector<Hige*> hige;
にしておき、基底クラスへのポインタを hige に格納というわけですよね?

基底クラスとやらを勉強してきます
即レスありがとうございました
0405デフォルトの名無しさんNGNG
>>404
勉強するのはそっちじゃないと思う・・・。
0406デフォルトの名無しさんNGNG
およ…
0407デフォルトの名無しさんNGNG
って、「基底クラスのポインタの返し方」ですよね?^^;
0408デフォルトの名無しさんNGNG
thisでいいやん。
0409デフォルトの名無しさんNGNG
クラスAとクラスBがあって、
クラスAがクラスBのポインタを保持
クラスBがクラスAのポインタを保持
っていうのは可能でしょうか?
相互にクラスポインタを保持すると何故かコンパイルエラーが出るのですが…
0410デフォルトの名無しさんNGNG
>>409
ポインタならできるはず・・・
ただ先行宣言が必要だけど

class B;

class A {
  B* b_;
};

class B {
  A* a_;
};
0411デフォルトの名無しさんNGNG
先行宣言というより friend class っぽい悪寒
0412デフォルトの名無しさんNGNG
>>400
hige.push_back(*static_cast< Hige * >(this));

>>409
class B;

class A {
private:
  B *b;
};

class B {
private:
   A *a;
};
0413デフォルトの名無しさんNGNG
ちゅーか>>409は
Cの自作関数の作り方から勉強し直しの予感
0414409NGNG
>>410-412
先行宣言じゃなく相互にヘッダをincludeしてたんですがエラーの原因は別でした。
試行錯誤の結果無事できました。レスありがとうございました。

>>413
ちゅーかc++の勉強不足でした…orz
0415デフォルトの名無しさんNGNG
>>414
> 相互にヘッダをincludeしてたんですが
詳しく
0416デフォルトの名無しさんNGNG
>>415
あ、すみません。よく見たらちゃんと先行宣言もしてありました。

---a.h---
#include"b.h"
class a{
public:
a(b* bb){pb = bb;}
b* pb;
};

---b.h---
#include"a.h"
class a;
class b{
public:
b(a* aa){pa = aa;}
a *pa;
};
簡略化するとこんな感じのソースでした。では。
0417デフォルトの名無しさんNGNG
もういっぺん基礎からやり直せ
0418デフォルトの名無しさんNGNG
int b();
int a() { b(); }
int b() { a(); }
0419418NGNG
ゴメソ勢いでintっちまった
0420デフォルトの名無しさんNGNG
code_a.cc
code_b.c
というC++とCの二つのcodeがあります。
code_aで使っている関数のうちb1()はcode_b.cで定義されていて、
code_bで使っている関数のうちa1()はcode_a.ccで定義されています。

Makefileの中に
code_a: code_a.o code_b.o
code_a.o: code_a.cc
code_b.o: code_b.c
という依存関係が書かれており、
make code_a
をすると
g++ -c -o code_a.o code_a.cc
gcc -c -o code_b.o code_b.c
gcc code_a.o code_b.o -o code_a
code_a.o: In function `main':
code_a.o(.text+0xa1a): undefined reference to `b1()'
code_b.o(.text+0x907): undefined reference to `a1()'
collect2: ld returned 1 exit status
make: *** [code_a] Error 1

というlink errorが出ます。
code_a.ccをの中身を書き換えて(constを#defineにしたり)、
code_a.cに変えてしまえば問題なくmakeが通ります。
code_aをC++のままでmakeしたいのですが、
何が問題なんでしょうか。
0421デフォルトの名無しさんNGNG
>>420
/* code_a.cc */
extern "C" int b1(); // b1がCリンケージの関数であることを示す宣言
extern "C" int a1(){/* ... */} // a1をCリンケージの関数として定義

これでうまくいかないかな。
0422420NGNG
どうもありがとうございました。
上手くいきました。
これって基本事項かな?
普段、Cのcodeと混在させるってしないもので。
0423デフォルトの名無しさんNGNG
>>422
基本中の基本。
0424デフォルトの名無しさんNGNG
C++ FAQくらいよんどこうな
0425デフォルトの名無しさんNGNG
C++ を使って数値計算 (おもに行列計算) をやりたいのですが、
フリーで質のよいライブラリってあるでしょうか?
よろしくお願いします。
0426デフォルトの名無しさんNGNG
>>425
まずは本スレ21へのレスをどうぞ
0427デフォルトの名無しさんNGNG
>>426
ごめんなさい。すでに出ていたのですね。
ご丁寧にありがとうございます。
0428デフォルトの名無しさんNGNG
本スレがあるのかと考えてしまった
「本店」とかと同じ使い方か
0429デフォルトの名無しさんNGNG
>>416
溜息…
0430デフォルトの名無しさんNGNG
>>528
その場合の「本店」自体、イントネーションで二通りの解釈があるな。
0431デフォルトの名無しさんNGNG
いわゆる「当店」って意味ですか。
0432デフォルトの名無しさんNGNG
本官を侮辱すると(ry
0433デフォルトの名無しさんNGNG
javaのdeprecated宣言の様にコンパイル時に該当クラスやメソッドの利用を推奨しない事を警告するような方法はありますでしょうか?
環境に依存しないのが良いのですが特定のコンパイラにはあると言う情報でもかまいません。
0434デフォルトの名無しさんNGNG
>>433
クラス単位なら、当該ヘッダに #warn 書いておくとか。
0435デフォルトの名無しさんNGNG
>>434
ヘッダ内に移行すべきクラス書きたい時とかどうしようか悩んでしまってるんです。
やはり事由を記述して新しいヘッダ読めって書くべきなんでしょうかねぇ。

むぅ。
0436デフォルトの名無しさんNGNG
>>433 doxygen
0437デフォルトの名無しさんNGNG
>>433
ttp://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Function-Attributes.html#index-_0040code_007bdeprecated_007d-attribute_002e-1612
0438433NGNG
みなさんありがとう、
gccっていろいろ拡張されているんですねぇ。

とりあえず現行のソースは@deprecatedを使ってdoxygenで作ったマニュアルを見てくださいと#warnに書いておく事にします。
0439デフォルトの名無しさんNGNG
コンストラクタのメンバ初期化部って表現力低すぎだよね
0440デフォルトの名無しさんNGNG
>>439
配列以外で特に不満はないが・・・
0441デフォルトの名無しさんNGNG
構造体も・・・
0442デフォルトの名無しさんNGNG
構造体も必要ならコンストラクタ書いちゃうから気にしないなぁ。
0443デフォルトの名無しさんNGNG
Win32APIだと構造体だらけで
HOGE hoge = { sizeof(HOGE) };
なんて初期化する場面がしょっちゅうあるからな。
0444デフォルトの名無しさんNGNG
>>443
動作上よく出てくるのはいいが
記述上おなじことを何度も書いてる香具師は低脳
0445デフォルトの名無しさんNGNG
>>444
それコンストラクタのメンバ初期化と何か関係ある話か
0446デフォルトの名無しさんNGNG
>>445

442までは関係あったが、443から関係なくなった
0447デフォルトの名無しさんNGNG
>>446
443も関係あるじゃん。
0448デフォルトの名無しさんNGNG
>>447
いーや、関係ない
442で終わった話を無理やり続けているだけ
0449デフォルトの名無しさんNGNG
あげてる奴はなんでそんなに仕切りたがってるんだ。
0450デフォルトの名無しさんNGNG
>>449
別に続けるなとは言ってない
この点でもまたお前は流れが読めてない
0451デフォルトの名無しさんNGNG
>>450
屁理屈はいいから。
つか>>444はコンストラクタの話とは関係なかったんだな。
どうりで意味不明だと思った。
0452デフォルトの名無しさんNGNG
const参照の代入をコンストラクタ内で行えたら便利よくないか?
よくないか。
0453デフォルトの名無しさんNGNG
>>452
「const参照の代入」ってなんだ?
0454デフォルトの名無しさんNGNG
int main()
{
unsigned short int a,b,c;// 2 byte
a=40000;
b=30000;

c = (a+b) >> 1;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
cout << "c: " << c << endl;
}


こいつの出力がちゃんと

a: 40000
b: 30000
c: 35000 // ここがオーバーフローして計算されると予想した

になるのはコンパイラが賢いからでしょうか?文法的に正しいのでしょうか?
それともわたしが勘違いしてるのでしょうか?(環境はVC7.1です)

教えてください。
0455デフォルトの名無しさんNGNG
希望通りにしたいなら
(unsigned short)(a+b)
0456デフォルトの名無しさんNGNG
>>454
"integer promotion" または 「整数の格上げ」 とか、そういうの。
0457デフォルトの名無しさんNGNG
>>453
const参照→const Hoge&なメンバ変数がコンストラクタ内なら代入できる。みたいな
0458デフォルトの名無しさんNGNG
>>457
初期化で十分だな。そんなの全然便利よくない。
0459デフォルトの名無しさんNGNG
>屁理屈はいいから。

プ
0460デフォルトの名無しさんNGNG
>>459 どうでもいいから無駄話でageんな。
0461デフォルトの名無しさんNGNG
>>458
const変数の初期化をコンストラクタ内でしたいと思うことはかなりある。
参照はなにかとややこしいので出来なくていいと思うが。
JavaもC#も出来るし、次はC++もできるようにして欲しいな。
0462デフォルトの名無しさんNGNG
VBのソースをC++に変換するにはどうしたらいいの?
0463デフォルトの名無しさんNGNG
いったん.NETにコンバートしてコンパイル。
実行ファイルを逆アセンブルしてC++.NETのソースに戻す。
dotnet2win32を使って普通のコードに直す。
ただし、完全にうまく行くとは限らない。

はい、次の方どうぞ。
0464デフォルトの名無しさんNGNG
>>461
初期化したいなら初期化すればいいだろ。
代入できるようにする必要は無い。
0465デフォルトの名無しさんNGNG
>>463
即レスありがとう。
私が使用してるのはMicrosoft Visual C++ 6.0なんですが
コンバートできますか?
0466デフォルトの名無しさんNGNG
>>464
>>457は「代入」と書いてるが、書いてる内容はJavaなんかの初期化のことだ。
ある計算結果をconstメンバにしたいときとか。
0467454NGNG
>>455-456
ありがとうございます。
キーワードをもとに調べてようやくわかりました。

1. 型は常に、必要であれば、精度を失わないように、サイズの大きな型にプロモートされる
2. int型よりもより小さな整数型が含まれた算術式では、評価の前にint型にプロモートされる
(C++ Primerより)

ということはint型より大きな数値で試せばオーバーフローするのかな?と思って試すと無事(?)フローしました。
int main()
{
unsigned short int a,b,c;// 2 byte
a=40000;
b=30000;
c = (a+b) / 2;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
cout << "c: " << c << endl;

unsigned long d,e,f,g; // 4 byte
d = 4000000000;
e = 3000000000;
f = (d+e) / 2;
g = (d & e) + ((d ^ e) >> 1);
cout << "d: " << d << endl;
cout << "e: " << e << endl;
cout << "f: " << f << endl;
cout << "g: " << g << endl;
}

ありがとうございました。
0468454NGNG
--- 467の結果 ---
a: 40000
b: 30000
c: 35000
d: 4000000000
e: 3000000000
f: 1352516352
g: 3500000000
---

_(._.)_
0469デフォルトの名無しさんNGNG
Foo::Foo(int x) : constmember_(x ? Foo::bar() : Foo::Baz()) {}

何も困らんが、釣り?釣られた?
0470デフォルトの名無しさんNGNG
>>466
C++で代入と初期化の区別を曖昧にするな。
計算結果をconstメンバにしたけりゃ勝手にしろよ。
0471デフォルトの名無しさんNGNG
>>469
誰も困ってるなんて話はしてないわけだが。
そうやってメンバ初期化部分がごちゃごちゃするから
コンストラクタ内で書けるといいねってだけの話だ。
0472デフォルトの名無しさんNGNG
そうですよね
Foo::Foo(int x) : constmember_(x ? (x!=1 ? (x!=2 ? ( x!=3 ? (....) : Foo::bar3() ) : Foo::bar2() ) :Foo::bar1()):Foo::bar()) : Foo::Baz()) {}
0473デフォルトの名無しさんNGNG
>>470
区別を曖昧にしてるのは俺じゃねーよ。457だ。
0474デフォルトの名無しさんNGNG
>>471
469のどこがごちゃごちゃ?
コンストラクタ内で書けるとどうなるの?
0475462NGNG
私はどうしたらいいんでしょう^^:
0476デフォルトの名無しさんNGNG
>>474
いちいち例を書かんとダメなのか・・・
メンバが複数あったりコメント書きたかったり、適当に想像しろ。
0477デフォルトの名無しさんNGNG
>>475 出て行けばいいとおもうよ。
0478デフォルトの名無しさんNGNG
>>475笑えばいいと思うよ。
0479462NGNG
煽らなくても^^:
0480デフォルトの名無しさんNGNG
>>460
ああ、ごめんなw
0481デフォルトの名無しさんNGNG
笑とけ笑とけ。
0482デフォルトの名無しさんNGNG
>>475
自力でゴリゴリするも良し。1から作り直すのもまた宜し。
0483デフォルトの名無しさんNGNG
>>475
VBの一関数を書き直すだけとかなら機械的にできなくもないが、
フォームデザインも含めてとなると結局は作り直しになる。
0484462NGNG
>>483
回答ありがとうございます

>VBの一関数を書き直すだけとかなら機械的にできなくもないが、

そういうソフトとかあるんでしょうか?
フォームやデザインは書き直さなくてもいいので良ければ教えてもらえると
幸いです。
0485デフォルトの名無しさんNGNG
>>484
スレ違い。環境依存スレへどうぞ。
この辺とか。
http://pc5.2ch.net/test/read.cgi/tech/1098912550/
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
http://pc5.2ch.net/test/read.cgi/tech/1090324689/
0486デフォルトの名無しさんNGNG
bmpファイルのビット数を変換するためのサンプルプログラムなどを置いているサイトなどありませんか?
0487デフォルトの名無しさんNGNG
>>486
ありますが、純C++の話題じゃないので書けません。
0488デフォルトの名無しさんNGNG
Rubyなら簡単だよ!!!!!!!!!!!!!!!!!!!!1
0489デフォルトの名無しさんNGNG
>>486
http://pc5.2ch.net/test/read.cgi/tech/1090897159/
0490デフォルトの名無しさんNGNG
>>486->>489
スマソ、向こうで聞いてみます。
0491デフォルトの名無しさんNGNG
仮想継承やってて sizeof したらサイズがでかいんです
g++ だと普通なのに…
0492デフォルトの名無しさんNGNG
>>491
??わからん??
gcc以外のコンパイラではサイズがでかくなるという意味?
0493デフォルトの名無しさんNGNG
>>491
どうもそうらしいな。
http://www.s34.co.jp/cpptechdoc/article/sizeof/index.html
0494デフォルトの名無しさんNGNG
っていうか、クラスを使う限り、sizeofを使うケースってある?
もちろん、Cの関数を呼び出すケースは別にして。

コンテナとアルゴリズムを適切に使っていれば、
使うケースは無いような気がするけど、どーよ?
0495デフォルトの名無しさんNGNG
>>493
基本中の基本
0496デフォルトの名無しさんNGNG
template<typename T>
とかの T の種類によって処理を変えたりとかできませんかね

switch (T) {
case int:

みたいな
0497デフォルトの名無しさんNGNG
モダーン嫁
0498デフォルトの名無しさんNGNG
if (typeid(T) == typid(int) {
     // int の時の処理
} else if (typeid(T) == typid(double) {
     // double の時の処理
} 以下続く

ただし全然オススメ出来ない
特殊化すればいいわけだし
0499デフォルトの名無しさんNGNG
ありがとうございます。特殊化というのを調べてみます
0500デフォルトの名無しさんNGNG
RTTI牛刀
0501デフォルトの名無しさんNGNG
正直、RTTIつかわなきゃならない程追い込まれた事がない
0502デフォルトの名無しさんNGNG
Extension Object, Role Object パターンとかで使ったりもするけど
0503デフォルトの名無しさんNGNG
RTTIって言うとdynamic_castも含まれちゃうけど、
typeidに限って言えば俺もほとんど使ったこと無いな。
0504デフォルトの名無しさんNGNG
dynamic_castも極力使わない
0505デフォルトの名無しさんNGNG
dynamic_castは使ったら負けだと思う
根性無いからしょっちゅう負けてるけど
0506デフォルトの名無しさんNGNG
----
struct A
{
  template< typename T > A();
};
struct B : A
{
  B() : A<int>() {}
};
----
↑をコンパイルすると、Bのコンストラクタ内の初期化リストで文法エラーになってしまいます。

テンプレート引数がコンストラクタの引数から推測できないコンストラクタテンプレートは
どうやってテンプレートインスタンスを選択するんでしょうか?
0507デフォルトの名無しさんNGNG
>>506
よくわからんが、こんな感じではだめなん?

template <typename T>
struct Type2Type {
 typedef T OriginalType;
};

struct A {
 template <typename T> A(Type2Type<T>) {}
};

struct B : A {
 B() : A(Type2Type<int>()) {}
};
0508デフォルトの名無しさんNGNG
>>507
それは
「テンプレート引数がコンストラクタの引数から推測できるコンストラクタテンプレート」
になってるだろ。
0509デフォルトの名無しさんNGNG
template <class T>
class C {
    template <class U> friend class C<U>;
};
が VC7.1 でコンパイルしたところ
error C3857: 'C<T1>': 複数テンプレート パラメータ一覧は使用できません。
ってなるんですが、friend には出来ないってことなんですか?
More Effective C++ の auto_ptr に同じコードがあるんですが…
0510デフォルトの名無しさんNGNG
new関数をコンストラクタを呼び出さずに呼び出す方法ないですかね?
配列テンプレートを作るときに格納するクラスで定義された
メモリ確保方法を使用したいのですか…
0511デフォルトの名無しさんNGNG
>>510
placement new
0512511NGNG
あ。ごめん。逆か。
でもやりたいことをするためには、普通 placement new だと思うんだけど……。
0513デフォルトの名無しさんNGNG
>>510
::operator new()
0514デフォルトの名無しさんNGNG
>>510
>>513のやり方で領域を確保して、>>511-512のやり方で
インスタンスを生成する。

これにて一件落着。
0515デフォルトの名無しさんNGNG
>>506
>テンプレート引数がコンストラクタの引数から推測できないコンストラクタテンプレート
って初めて見たんですがありなんでしょうか? >> All
0516デフォルトの名無しさんNGNG
>>509
これg++でもだめですね
0517デフォルトの名無しさんNGNG
VC6のサービスパック6を入れようと思ってFULL版をマイクロソフトのサイトからダウンロードしてきたのですが、
setupsp6.exeを起動しても
「16ビット Windows サブシステム
config.nt. システム ファイルは MS-DOS および Microsoft Windows アプリケーションを実行するのに適していません。 アプリケーションを終了するには、[閉じる]を選ん
でください。」
といったダイアログが出てきてインストールできません。ダイアログには「閉じる」と「無視」があるのですが、どちらを
押してもダイアログが閉じるだけです。
どなたか原因が解る方、いませんか?OSは2kです。

Visual Basic 6.0、Visual C++ 6.0、および Visual SourceSafe 6.0d を対象とする Service Pack 6
ttp://www.microsoft.com/downloads/details.aspx?FamilyId=A8494EDB-2E89-4676-A16A-5C5477CB9713&displaylang=ja
0518506NGNG
14.5.2 - Member templates [temp.mem]
-2- より引用。
Note: because the explicit template argument list follows the function template name, and because conversion member function templates and constructor member function templates are called without using a function name,
there is no way to provide an explicit template argument list for these function templates.

「明示的なテンプレート引数を与えることはできない」ということで、
つまり、暗黙の呼び出しのための手がかりが無い以上、
呼び出す方法が無いってことになるのかな。
0519デフォルトの名無しさんNGNG
コンパイラから見たらデフォルトコンストラクタが複数あるように見えるだろうし、
どちらにせよそういう使い方はよろしくないな、使用されないダミーのパラメータを持たせるのが良いかと。
0520510NGNG
>>511-514
ありが�d
0521510NGNG
>>511-514
うーん。でもこの方法だと、new/deleteが宣言されてない型とか
プリミティブ型のnew/deleteを呼び出したときデフォルトの
new/deleteが呼び出せずコンパイラエラーになってしまいますね(VC.NET2003)
ATLのCArrayとかSTLのvectorでもmallocの類つかってるみたいだし
やっぱ無理なのか…
0522デフォルトの名無しさんNGNG
関数への引数として参照を用いた場合
何byteのデータとして渡されてるんでしょうか?
というより「渡される」という解釈ではないのかな?

あと、構造体を作るときのアライメント(4byte刻みとかのやつ)は
関数に渡すときの引数群にも当てはまるのでしょうか?

例:
void Func( char c1, int i, char c2 );
void Func( int i, char c1, char c2 );

微妙な話題ですみません
関数を作るときとか、どういった順序がいいのかよく迷うので
指標になるようなものはないかなぁと思いまして
0523デフォルトの名無しさんNGNG
>>522
> 何byteのデータとして渡されてるんでしょうか?

一般的な実装では、ポインタと同じ。

> 関数に渡すときの引数群にも当てはまるのでしょうか?

一般的な実装では、当てはまらない。
順番は呼び出し側コードの読みやすさ、書きやすさで決めれ。
0524デフォルトの名無しさんNGNG
>>522
構造体でも4バイトアライメントとは限らない。環境(コンパイラオプションを含む)で変わってしまう。
また、関数の引き数は構造体とは違うので(以下>523
0525デフォルトの名無しさんNGNG
>>522
構造体への参照なら一般的な実装ではポインタ渡しになっており
このときの「隠しポインタ」はポインタとしての境界要求を持っていて
メモリ空間が 32bits の処理系では 4bytes 境界が多い

引数の順序に関しては俺はこうしてる
主要なものほど左、ただし同じ系列の関数と統一性を持たせること

デフォルト引数の仕様に不便を感じることがある
void Func(int hour = 0, int min = 0); //という関数に対して
Func(0); //暗黙の min = 0 はできるが
Func(, 0); //暗黙の hour = 0 ができない
こんなときは素直にオーバーロードするがいまいち釈然としないものが残る
void Func(int hour, int min);
inline void Func(int min) { Func(0, min); }
0526デフォルトの名無しさんNGNG
>>525
名前付きパラメータですね.もしかしたら次のBoostに入るかも.

Func(0); // min = 0, hour = 0
Func(hour = 1); // min = 0, hour = 1
0527デフォルトの名無しさんNGNG
>>525
最初の段、ダウト。境界とメモリ空間には強い関連はない。
メンバの型と並びによって、複雑なふるまいをすることが少なくない。
0528デフォルトの名無しさんNGNG
>>527
ああ、空間が 32bits だから境界があるわけじゃないな
これは失礼した、言い直す

境界は空間ではなくバス幅から出てくること
バス幅が1番地あたりのビット数の2倍なら 2bytes 境界、
4倍なら 4bytes 境界の制限が生じる

とは言うものの
バス幅 64bits なのに非特権状態では奇数番地でいいのがあったり
バス幅 8bits なのに 2bytes 境界のがあったりと
憶えたての人を混乱させるシステムが跋扈しているんで
簡潔な説明がしづらい (言い訳くさくてアレだが・・・
0529デフォルトの名無しさんNGNG
>>528
素直に、環境依存だから当てにするなって言えばいいじゃん。
実際、sparc compilerなんかだとメンバに一つでもdoubleが入ると8バイト境界になるけど
charしかなければ1バイト境界だし。
0530デフォルトの名無しさんNGNG
>>529
いや判断材料は持ってないとSF的な妄想で書くわけにもいくまい
522 が訊きたかったのはそのあたりじゃないか

当てにするなというよりマニュアルとアセンブラで確認しろってとこだが
仮にそう言ったとして今現在の 522 にとってどうなのかな
0531デフォルトの名無しさんNGNG
>>526
Boost?
0532デフォルトの名無しさんNGNG
int hour;
int min;

void Func(...);

とかじゃねえだろなw
0533デフォルトの名無しさんNGNG
T* p = new T;
T* p = new T();
の両方見るんですが、差異はあるのでしょうか…?
0534デフォルトの名無しさんNGNG
>>533
T が POD の場合、前者は中身が初期化されない。
後者はあたかも = {0} したかのように初期化される。
0535デフォルトの名無しさんNGNG
>>534
ありがとうございます

POD っていうのは
ユーザー定義コンストラクタ、デストラクタ、コピー演算子がない
かつ private, protected に非staticデータメンバがなく、
基底クラスも仮想関数も持たないクラスという理解でいいでしょうか…?
0536デフォルトの名無しさんNGNG
p->int::~int();
0537デフォルトの名無しさんNGNG
template <class To, class From>
inline To implicit_cast(From from)
{ return from; }
と static_cast はどのように使い分けたらいいのでしょうか?

あと implicit_cast の引数は const From& from で渡した方が
効率がいいように思うのですが、これでは何か問題があるのでしょうか?
0538デフォルトの名無しさんNGNG
>>537
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdndeepc/htm/deep05182000.asp
0539デフォルトの名無しさんNGNG
>私としては、C++ の委員会が reintepret_cast と static_cast とを相互排他的な
>動作セットに分類してくれていたらと思います。これら 2 つの演算子の動作が
>重複しなければ、プログラマもそれぞれの演算子を使うべき場面を判断しやすかった
>でしょう。
ハゲドウだな。
0540デフォルトの名無しさんNGNG
俺は別に迷ったこと無いけどな・・・。
0541デフォルトの名無しさんNGNG
>しかし、たとえ必要のない場合でも、このようにすべての型変換を
>明示的な形にすることにはメリットがあります。

全ての暗黙の型変換を implicit_cast でやるのはマンドクサイ気がするんだが、
これ読む限りやったほうがいいのかな?
0542デフォルトの名無しさんNGNG
implicitっていう名前がこれまた最悪だ
0543デフォルトの名無しさんNGNG
>>541
コンパイラの警告をつぶすためには有効じゃないかな。
情報喪失の警告は重要な情報だが常に出るのはうざいので、
implicit_cast でマーキングした上でコンパイラさんには黙ってもらう。
grep すれば後から見つけ出せる。
間違ってもコンパイラオプションで黙らせるようなことはしちゃいけない。
0544デフォルトの名無しさんNGNG
>>543
long lg = 0;
short st = 0;
st = implicit_cast<short>(lg);

VC7.1 では
warning C4244: 'return' : 'long' から 'short' に変換しました。データが失われているかもしれません
ってなるんだけどどういうこと??
0545デフォルトの名無しさんNGNG
implicit_castの中で出てるんでしょ?
そこだけ警告切りなよ。そのために関数にしてるんだから。
0546デフォルトの名無しさんNGNG
暗黙の型変換を全てimplicit_castで書いてる香具師なんているのかね
0547デフォルトの名無しさんNGNG
>>544
BOOLからboolの変換でうるさいから、
BOOL foo = TRUE;
bool bar = !!foo;
してますがなにか。
0548デフォルトの名無しさんNGNG
bool bar = foo ? true : false;でいいんじゃないか。
0549デフォルトの名無しさんNGNG
bool bar = ( foo != 0 );
俺はこれ。
0550デフォルトの名無しさんNGNG
!Ruby
0551デフォルトの名無しさんNGNG
スコープ解決演算子でエラーが起こる(VC7.1,GCC3.4.3)のですが、
どうすべきなのでしょうか?
error C2510: 'type' : スコープ解決演算子 '::' の左側の識別子名は、クラス、構造体、共用体のいずれでもありません。

namespace Name
{
struct a
{
typedef int type;
static const int data;
};
}

//const int ::Name::a::data = 100; //OK
//const ::Name::a::type Name::a::data = 100; //OK
//const Name::a::type ::Name::a::data = 100; //NG
//const ::Name::a::type ::Name::a::data = 100;//NG
0552デフォルトの名無しさんNGNG
新しい演算子を定義できないから嫌い。
0553デフォルトの名無しさんNGNG
それが関数でありクラスであり・・・
無数の空間を与えられながらそれを否定して
ある特定の文字列に固執する者は遠目に何に見えると思うかね
0554551NGNG
>>552
どーも
type ::var を type var に変形したら通りました
template <typename T> struct identity
{
typedef T type;
};
const Name::a::type identity<::Name::a>::type::data = 100; //OK
const ::Name::a::type identity<::Name::a>::type::data = 100; //OK
0555デフォルトの名無しさんNGNG
551にレスしたわけじゃないよ
0556デフォルトの名無しさんNGNG
>>550
//const Name::a::type ::Name::a::data = 100;
これは
const Name::a::type::Name::a::data = 100;
ということなので、NGで当たり前。
const Name::a::type (::Name::a::data) = 100;
とすればいい。
0557デフォルトの名無しさんNGNG
おはようございます。
ファイル入出力やディレクトリ操作から始まって
ソケットプログラミングまで扱うような、
C++の用例の載っているおすすめの参考書がありましたら教えて頂けませんか?
趣味でプログラムの勉強をしてまして、
UNIXの基本コマンドを練習用に自分で書いてみたいんです。
0558デフォルトの名無しさんNGNG
allocaを使いたいのですが、いろいろ調べてみるとallocaは、
プラットフォーム依存になってしまうなど、あまり使うのを推奨されていないようで、
allocaの代わりになるようなものは、ないでしょうか?
以下のコードのように、呼び出し先で明示的に確保されたメモリを
解放しなくても良い方法を知りたいのです。宜しくお願いいたします。

char* ReturnChar(void)
{
char* pRet = new char[5];
strcpy(pRet, "test");
return pRet;
}

int main(void)
{
char* pTest = ReturnChar();

// ここで、delete[] pTest; をしなくても解放されるようにしたい

return 0;
}
0559デフォルトの名無しさんNGNG
>>558
boost::shared_array
0560デフォルトの名無しさんNGNG
>>558
オマエの例では、allocaはもともと使用できないぞ。
0561デフォルトの名無しさんNGNG
>>558
>>559またはstd::auto_ptr
0562デフォルトの名無しさんNGNG
あの例だと、これが最適じゃないか?

void GetChar(std::string &ret){
ret="test";
}

main(){
std::string test;
Char(ret);
}
0563デフォルトの名無しさんNGNG
sharted_arrayかstringで受け渡ししる

const std::string GetChar()
{
reutrn "test";
}
int main(void)
{
std::string str = GetChar();
return 0;
}
0564デフォルトの名無しさんNGNG
>>557です。スレ違いですよね。別のスレで改めて質問しようと思います。
0565デフォルトの名無しさんNGNG
>>564
あるよ。
UNIXネットワークプログラミング入門
0566デフォルトの名無しさんNGNG
>>561
new[]で確保したものにauto_ptrはよろしくないかと。
0567561NGNG
申し訳ない
0568デフォルトの名無しさんNGNG
どっちかっつーと対応するのはscoped_arrayだと思うが。
allocaの代わりって事は他とshareしないんだろ?
0569デフォルトの名無しさんNGNG
boost1.32.0キタ━━━━(゚∀゚)━━━━!!
0570デフォルトの名無しさんNGNG
>>569
boostスレから脱獄しないように
0571デフォルトの名無しさんNGNG
>>556
納得したいけどなんか腑に落ちないな
0572デフォルトの名無しさんNGNG
Name::a::type const ::Name::a::data = 100;
0573デフォルトの名無しさんNGNG
>>572
typedef char* type;
ポインタだと違う型になってしまう悪寒。

0574558NGNG
御解答ありがとうございます。
>>559、>>562、>>563、>>568
で検討して見ます。
できれば、allocaの代わりになるものでANSI準拠のものが良かったのですけど。
ちなみに、boostってライセンスってどうなんですか?
改変、商用OKであれば、嬉しいです。
0575デフォルトの名無しさんNGNG
>>574
OKだったはず。バイナリ配布なら特に明記もいらないんじゃなかったっけか
0576デフォルトの名無しさんNGNG
>>574
ttp://www.tietew.jp/cppll/archive/5773
0577デフォルトの名無しさんNGNG
>>573
ちがいはありません
0578デフォルトの名無しさんNGNG
>>577
通報シマスタ
0579デフォルトの名無しさんNGNG
#define UNICODE
#define _UNICODE
#include <iostream>
int main()
{
 std::wcout.imbue(std::locale("japanese"));
 std::wcout << L'A' << std::endl;
 return 0;
}
実行結果: 65
Aって表示して欲しいのに数字で表示されちゃいます。
vc7.1 STLport-4.6.1です。

0580デフォルトの名無しさんNGNG
"A"
0581デフォルトの名無しさんNGNG
std::wcout.put(L'A') << std::endl;
0582デフォルトの名無しさんNGNG
std::wcout.put(L゚∀゚) << std::endl;
0583デフォルトの名無しさんNGNG
>>582 さんの様に入力するとコンパイルエラーがでます。
0584デフォルトの名無しさんNGNG
そりゃそうだ
0585デフォルトの名無しさんNGNG
なんで殆どの方はVC7.1にもstlport適用するかな(プンプン
0586デフォルトの名無しさんNGNG
漏れ適用してないよ。
0587デフォルトの名無しさんNGNG
>>581 >>582
ハゲワラ
0588579NGNG
coutだとcout<<'A'<<endlでちゃんと表示されるのに...。 仕様ですか?

ほかの人のソースを見るとlocale::global(locale("japanese"))で、できてるのですが
stlportだとstd::wcout.imbue(std::locale("japanese"));ってしなきゃならないのらしいのですが
これはstlportが単独でわるいのですか?585さんが言うようにvc7.1とあわさると悪くなるのですか
0589デフォルトの名無しさんNGNG
x=new double*[X];
for (int i=0;i<X;i++)
{
    x[i] = new double[Y];
}
で2次元配列を確保しているのですが、これをメモリ上で連続した領域に確保するにはどうしたらよいでしょうか?
0590デフォルトの名無しさんNGNG
x=new double*[X];
x[0] = new double[X*Y];
for (int i=1; i<X; i++) x[i] = x[0]+i*X;

とか
0591デフォルトの名無しさんNGNG
>>588
VC++ではデフォルトでwchar_tはshortのtypedefだから
君が文字を突っ込んだつもりでも、向こうは数字が来たと思ってる。
さらにSTLPortはこのデフォルトの設定を使ってコンパイルしてるから
単にVC++の設定を変えるだけだとリンクエラー出る。
STLPortのmakeファイルをいじって再コンパイルが必要。
0592デフォルトの名無しさんNGNG
STLPort使えねー
0593デフォルトの名無しさんNGNG
VC7.1でSTLPort使うメリットあるのかね?
0594デフォルトの名無しさんNGNG
かなり初歩的な質問だと思うのですが,C で普通に行える

void *a = 1;
a += 5;

のような事を C++ 内で行うと gcc に
「error: `void *' 型のポインタが計算で使われました」
と怒られてしまいます.これを回避するにはどうすれば良いのでしょうか.

ポインタだけでも教えて頂けると助かります.

; 現状は char* にキャストして回避してます...
0595デフォルトの名無しさんNGNG
>>かなり初歩的な質問だと思うのですが,C で普通に行える
嘘をつくな
0596デフォルトの名無しさんNGNG
void* には減算、加算はなくて ==, != しか無い。
どんなクソプログラム書いてるのか知らんが一から考え直せ。
0597594NGNG

>> 594
C のコードではエラー出てなかったんで,てっきり使えると思ってました.

>> 596
mmap したものに memcpy でデータを順次書き込んでいくコードなんですが,
書き込み位置をずらすために,

void *p = mmap(...);
mempcy(p, hoge, size);
p += size; // ← ここ

のような事がしたいんですが,普通はどうやるんでしょうか?
0598デフォルトの名無しさんNGNG
char*でええやん
0599デフォルトの名無しさんNGNG
いや BYTE* を使うべきだろ。
0600デフォルトの名無しさんNGNG
>>597
>C のコードではエラー出てなかったんで,てっきり使えると思ってました.

gcc には非標準拡張がてんこ盛り入ってる
他がそんなに綺麗なわけでもないが・・・

あんまり1つの処理系での「常識」を信じすぎるな、という教訓を得たならめでたいことだ
0601デフォルトの名無しさんNGNG
おめでとう
0602594NGNG

みなさん,ありがとうございます.勉強になりました.
0603デフォルトの名無しさんNGNG
じつにめでたいな
0604デフォルトの名無しさんNGNG
めでたいっつーか、おめでたいな。
0605デフォルトの名無しさんNGNG
今日は赤飯だ
0606デフォルトの名無しさんNGNG
10歳違いの妹が初整理をつい最近迎えました
0607デフォルトの名無しさんNGNG
おめでとう
0608デフォルトの名無しさんNGNG
VC7.1でSTLportを使うと、必ずマルチスレッドのモジュールをリンクしないと
エラーが出るので(STLportはスレッドセーフレベル2)、気をつけなければいけ
ないとすればその点かな。

速度的には・・・・どうなんでしょう?アルゴリズムは結構速いという定評ですが。
http://www.nantekotta.com/stl.html
↑これはVC6.0付属のDinkumwareとの比較なのであまり参考にならないが。
0609デフォルトの名無しさんNGNG
スレッドセーフレベルって何?
0610デフォルトの名無しさんNGNG
>>609
safe level でぐぐってみ。
0611デフォルトの名無しさんNGNG
>>609
http://japan.linux.com/print.pl?sid=03/05/19/1241240
0612デフォルトの名無しさんNGNG
ぐぐってみたけどrubyの方言か?
0613デフォルトの名無しさんNGNG
>>611
そりゃRubyだろ。スレ違い。
0614デフォルトの名無しさんNGNG
C++よりRubyの方が先進的。
禿も最近はRubyがお気に入りだってさ。
0615デフォルトの名無しさんNGNG
STLPortはrubyで出来ていたのか(w
0616デフォルトの名無しさんNGNG
C++には将来がない。
Rubyには未来がある。
0617デフォルトの名無しさんNGNG
セーフ・レベルがあるのかどうかは知らんが、STLportは例外セーフおよび
スレッドセーフである事は確か。オプションでコントロールできるが。
_REENTRANTマクロだっけ。
0618デフォルトの名無しさんNGNG
_MTマクロだろ
0619デフォルトの名無しさんNGNG
class Vector { // 基底クラス(ベ−スクラスとも言う)
int x,y ; // 座標値のみをもっているクラス
public:
Vector( int a,int b ) { x = a ; y = b ; }
int get_x() { return x ; }
} ;

class Point: public Vector { // 派生クラス(導出クラスとも言う)
int color ;
public: // デフォルトの色は9
Point( int a,int b,int cc=9 ):Vector( a,b ) { color = cc ; }
int get_color() { return color ; }
} ;

Pointコンストラクタの後ろについている「:」がよくわかりません。
PointクラスがVectorクラスを継承しているのは分かるのですが・・・・・・
0620デフォルトの名無しさんNGNG
よく本嫁
0621デフォルトの名無しさんNGNG
>>619
初期化リスト。格好としては基底クラスのコンストラクタを呼び出している
ような感じになっている。
0622デフォルトの名無しさんNGNG
低レベルな質問にも親切に答えて下さってありがとうございます。
0623デフォルトの名無しさんNGNG
STLPortはロケール関係でメモリリークが検出されるのが気に入らない。
0624デフォルトの名無しさんNGNG
なら使わなきゃイイじゃん
0625デフォルトの名無しさんNGNG
使ってないけど、直してくれれば使いたい。
0626デフォルトの名無しさんNGNG
自分で直せば?
0627デフォルトの名無しさんNGNG
直してまで使いたいとは思わない。
0628デフォルトの名無しさんNGNG
文句を言うだけでお客様然とする奴等はRubyを使う資格無し。
0629デフォルトの名無しさんNGNG
ostream で、80行とかで改行してくれるような物を作ろうとしています。とこ
ろが、ostream を派生させたクラスを作ってput,writeをオーバーライドして、
書き込み文字数をカウントして、改行を付加しながら出力すれば簡単に出来る
かなと思いきや、 putもwriteもvirtualじゃないので、 ostream::operator<<
で入力した物は派生クラスのput,writeを呼んでくれなくあえなく断念。かと
言って、他のPODに対してのoperator<<を軒並オーバーライドするのも馬鹿っ
ぽいし、何か良い知恵があったら教えて頂けませんでしょうか。
書式制御なので、出来ればstreambufをいじるんじゃない方向がいいんですよね。

イメージとしては、
custom_stream stream(5)
stream << "test" << 200 << 0.05 << "test";
で、
test2
000.0
5test
のようになるようなストリームクラスを作りたいのです。
0630デフォルトの名無しさんNGNG
stringstreamに一度出力して整形しながらもう一度
出力しなおすのが楽なんじゃないか?
0631デフォルトの名無しさんNGNG
>>623
#ifdef _DEBUG
#define _STLP_DEBUG 1
#define _STLP_USE_NEWALLOC 1
#else
#undef _STLP_DEBUG
#endif

こんな事をしとけばいい
0632デフォルトの名無しさんNGNG
0633デフォルトの名無しさんNGNG
age荒らし厨ウゼー
0634C++ 初心者NGNG
こんなことがしたいんですけど、
コンパイル エラーが出るんです。
どういう風に修正したらいいでしょうか?

class Record { ... };
typedef Record* RecordPtr;
typedef const Record* ConstRecordPtr;

class Hoge {
private:
  vector<RecordPtr> _records;
public:
  const vector<ConstRecordPtr>& GetRecords(void) const
  {
    return _records;
  }

};
0635デフォルトの名無しさんNGNG
use "template"
0636デフォルトの名無しさんNGNG
って違うな。何がやりたいのかと、エラー個所かけ
0637デフォルトの名無しさんNGNG
>>634
vector<ConstRecordPtr> GetRecords(void) const
{
vector<ConstRecordPtr> result;
result.reserve (_records.size ());
copy (_records.begin (), _records.end (), back_insert_iterator <vector<ConstRecordPtr> > (result));
return result;
}
0638634NGNG
return _records でエラーです。

E:\Project\Test67\Main.cpp(18) : error C2440: 'return' : 'const class std::vector<class Record *,class std::allocator<class Record *> >' から
'const class std::vector<class Record const *,class std::allocator<class Record const *> > &' に変換することはできません。(新しい動作 ; ヘルプを参照)

理由: 'const class std::vector<class Record *,class std::allocator<class Record *> >' から
'const class std::vector<class Record const *,class std::allocator<class Record const *> >' へは変換できません。

コンストラクタはソース型を持てません、またはコンストラクタのオーバーロード レゾリューションがあいまいです。
0639634NGNG
>>637
あのー、戻り値は & なので、ローカルの result を返したらあかんでしょう。。。
0640634NGNG
あ、戻り値の & をとったわけか。
いや、そんな重いことはしたくないですぅ。。。
0641634NGNG
何がやりたいのか、といいますと、
RecordPtr のベクタを、ConstRecordPtr のベクタとして返したいわけです。
もちろん、コピーなどの操作は一切行わずに、単純な型変換だけ行ってです。
0642デフォルトの名無しさんNGNG
>>640
じゃresultに相当するのをmemberにもって慎重に操作したら?
だいたいその手の最適化は最後にプロファイルしてからだ
0643デフォルトの名無しさんNGNG
>>640
vector<ConstRecordPtr> GetRecords(void) const
{
return vector<ConstRecordPtr> (_records.begin (), _records.end ());
}
こっちがいいかも
0644634NGNG
>>642
> だいたいその手の最適化は最後にプロファイルしてからだ
いえ、レコードが大量にあることがあらかじめ分かっているので、
コーディング時にその最適化は終わらしておきたいんです。

>>643
やっぱりコピーしなあかんですか。。。
C++ ってこういうものなんでしょうか。。。
0645634NGNG
やっぱり奥の手を使うしかないのかなぁ。。。
こんなんで。

vector<ConstRecordPtr>& GetRecords(void) const
{
  return * (vector<ConstRecordPtr> *) (void *) (& _records);
}
0646デフォルトの名無しさんNGNG
うっさいなぁ。これでいけ。

const vector<ConstRecordPtr> &GetRecords() const{
return (const vector<ConstRecordPtr> &)_records;
}
0647デフォルトの名無しさんNGNG
>>634
こういうキャストで済む問題じゃないよな。
return *reinterpret_cast<vector<ConstRecordPtr>*>(&_records);
0648デフォルトの名無しさんNGNG
ていうか、ただvectorの内容を参照したいだけなら
const_iteratorを返せばいいんじゃないの?
0649634NGNG
>>646
あ!そんなんでいけるんですね。
ありがとう!感謝感謝
0650デフォルトの名無しさんNGNG
>>648
イテレータ返すのって、作法としていいのかな。
vector<..>::const_iterator GetRecordsBegin()
vector<..>::const_iterator GetRecordsEnd()
みたいに2つも用意しないといけないでしょう。
0651デフォルトの名無しさんNGNG
>>650
std::pair<std::vector<hoge>::const_iterator, std::vector<hoge>::const_iterator>を返せば良い。
0652デフォルトの名無しさんNGNG
うわー、それを呼び出すときって、大変じゃない?
pair 変数と const_iterator 2 つを用意して、
pair 変数で受け取って、second と first をとって別の変数に代入して。。。
Python のタプルのようなものがあれば楽だけど。
0653デフォルトの名無しさんNGNG
>>650
おいおい <algorithm> の関数の大半を否定するかよ・・・
0654デフォルトの名無しさんNGNG
少なくとも記法という観点からは否定したいねぇ。
map とか pair を多用するけど、便利なことは便利だが。
0655デフォルトの名無しさんNGNG
続きを検索なんてどうやっとん
0656デフォルトの名無しさんNGNG
イテレータによるコンテナの抽象化って、
正直いってあまり使わないんだよねー。
設計の段階でどのコンテナを使うべきかだいたい決まってしまうし。
0657デフォルトの名無しさんNGNG
>>655 どういうこと?
0658デフォルトの名無しさんNGNG
>>657
例えばパーサ作ってるときの区切り文字とか
0659デフォルトの名無しさんNGNG
それはお前がalgorithmを使いこなしてないだけ
0660デフォルトの名無しさんNGNG
それはイテレータみたいの使うねぇ。
0661デフォルトの名無しさんNGNG
650: イテレータ返すのって、作法としていいのかな。
653: おいおい、<algorithm> の関数の大半を否定するかよ・・・
654: 少なくとも記法という観点からは否定したいねぇ。
655: 続きを検索なんてどうやっとん
657: どういうこと?
658: 例えばパーサ作ってるときの区切り文字とか
659: ??? ←ここだけ流れが読めない
660: それはイテレータみたいの使うねえ。

「みたいの」って似て非なるものってこと?
0662デフォルトの名無しさんNGNG
C++厨って馬鹿ばっかり。
0663662NGNG
やっぱりRuby最高!
0664660 != 659NGNG
いや、抽象的な意味でのイテレータなら使う。
それが必ずしも STL の設計を踏襲したものにするとは限らないということ。

ポインタも抽象的な意味でのイテレータだし、
FILE* を fseek() するのも FILE* をイテレータとみなしているということだよね。
0665デフォルトの名無しさんNGNG
>>664
もしかしてenumeratorと間違ってない?
0666デフォルトの名無しさんNGNG
いや、FILE*はオブジェクト指向だろ。
0667デフォルトの名無しさんNGNG
for(int i = 0; i < N; i++){ ; }

これも、「イテレータみたいなもの」と言えるかしら
0668660NGNG
>>665
どう違うの?教えて君。
0669660NGNG
>>667
「これ」って何を指しているの?
0670デフォルトの名無しさんNGNG
Ruby!
0671デフォルトの名無しさんNGNG
>>664
そう、抽象的な意味でのイテレータだよな。
650の主張によれば始点と終点を別個に返す必要が出るらしいが、
仮に添え字で返したにしてもそれは同じことで、
本質的にシーケンス上の位置を示すものを返すことを
作法という観点からどのように否定するのか疑問に思ったわけさ。
仮に可読性と言うなら確かに STL の設計とは思想を異にする主張だな。
ある意味、template 引数が自動的な typedef になってくれることを使うか捨てるかで。

ところで、FILE* はファイル上の位置を示してないだろ。
これ、どうする?
FILE *fp1, *fp2;
fp1 = fopen("hoge", "r");
fp2 = fopen("hoge", "r");
fseek(fp2, 1, SEEK_CUR);
俺的には fseek の第2引数がイテレータで、第3引数が第2引数の型って気がするが・・・
0672デフォルトの名無しさんNGNG
>>667
p[i]などとして使っていれば、「イテレータみたいなもの」と言えなくもない。
0673デフォルトの名無しさんNGNG
イテレータは「繰り返すもの、反復するもの」だから
本義的にはポインタはイテレータではない。
だがC++のイテレータはポインタを含むように設計された
(つまり繰り返し処理のために++演算子を使うことにした)
からポインタはSTL内に限ってイテレータの一種になったに過ぎない。
0674デフォルトの名無しさんNGNG
>>673
ptr++
0675デフォルトの名無しさんNGNG
>>671
イテレータ自体が始点と終点を知っていれば何の問題も無いのでは?
JavaやC#ではわざわざendを返したりしない。
0676デフォルトの名無しさんNGNG
>>675 そう、それいいね。
0677デフォルトの名無しさんNGNG
>>675
終端標識を使ったから頭だけで済んだってのはナシだろ、
それだったらイテレータだって同じことじゃん。
0678デフォルトの名無しさんNGNG
FILE * はオブジェクト
シークポインタがイテレータ
0679デフォルトの名無しさんNGNG
>>675
Javaのイテレータは不自然だから嫌い
0680デフォルトの名無しさんNGNG
>634
boost::rangeとかどうですか?
http://www.boost.org/libs/range/index.html

>652
boost::tuples::tieとかどうですか?
http://boost.cppll.jp/HEAD/libs/tuple/doc/tuple_users_guide.html#tiers
0681デフォルトの名無しさんNGNG
for (int i (0); i < 10; ++ i) // <- (A)
for (int i (0); i < 10; ++ i) // <- (B)
cout << i << endl; // <- (C)

これってg++ではコンパイル出来るんですけどいいんでしたっけ?
(B)の行で(A)のiとコンフリクトするとかエラーが出るのが
本来の仕様だったりしないか不安なのですが
0682681NGNG
あとこっちも
for (int i (0); i < 10; ++ i) // <- (A)
{
int i (0); // <- (B)
cout << i << endl; // <- (C)
}
0683デフォルトの名無しさんNGNG
クラス全体で使うコンスタントをクラス内で定義するにはどうしたらよいのでしょうか?

class A{
    const int x=10;//<-できない
};
A::A()
{
    const int x=10;//<-ここでしか有効でない
}


0684デフォルトの名無しさんNGNG
>>683
class A{
static const int x=10;
};
か
class A{
const int x;
};
A::A(): x (10)
{
}
0685デフォルトの名無しさんNGNG
>>683
初期化リストを使うとか。A::A() : x(10) { ... };
0686デフォルトの名無しさんNGNG
>>684
staticをつければいいんですか。ありがとうございました。
0687デフォルトの名無しさんNGNG
質問お願いするっす、以下のこれは保証されているんでしょうか

std::map<int, int> map_weight;
map_weight[ 777 ] += 100; //いきなり
printf( "val = %d\n", map_weight[ 777 ] ); //val = 100

intの初期化は、いわゆる組込型のint()に必ずなっているんでしょうか
0688687NGNG
自己解決しました。もういいよ
0689デフォルトの名無しさんNGNG
>>688は騙りです
単発質問にトリップがいるのか
0690トリップ ◆hEpdoZ.tHU NGNG
>>689
呼んだ?
0691687NGNG
>>689
どういう意味でしょうか?
自己解決したので質問に答えなくてもいい、
というのは必要はないってことですか?
0692デフォルトの名無しさんNGNG
>>691
俺は 689 ではないが・・・
別に放置でも構わなかったが
自己解決したことを律儀に連絡してくれたところまでは礼儀正しい印象だよ
最後の「もういいよ」が投げやりな印象を与えていて
キレやすい人に引火しかねないのが玉に瑕
0693デフォルトの名無しさんNGNG
>>687
ISO/IEC 14882-1998
23.3.1.2 map element access

T& operator[](const key_type& x);

Returns: (*((insert(make_pair(x, T()))).first)).second
                   ~~~~
保証されている
0694デフォルトの名無しさんNGNG
>>693
ありがとうございましす。助かりました。
というかそうか…出来る人はISO C++ 規格できっちり調べるのか。
回答内容以上に頭が下がる思いです。今後の指針にします。
0695デフォルトの名無しさんNGNG
と失礼しました
s/ましす/ます
0696デフォルトの名無しさんNGNG
クラスの静的メンバに構造体がある場合、うまく初期化できなくって困っているのですが・・・
たとえばヘッダに
class a
{
static D3DXVECTOR3 m_vPosi;
static int PosiX;
{
と定義していた場合、cppファイルの先頭の辺りで
D3DXVECTOR3 a::m_vPosi.x = 5.0f;
などとするとコンパイルエラーとなるのです。
int a::m_iPosiX = 5;
などは通るのですが・・・・。まとめて
D3DXVECTOR3 a::m_vPosi = {5.0f,5.0f,5.0f};
などとするしかないのでしょうか?
0697モウモウNGNG
.x だけ初期化したいんなら、
D3DXVECTOR3 a::m_vPosi = { 5.0f };
でいけるはず。
0698デフォルトの名無しさんNGNG
>>694
当たり前だ。無駄な議論を避けるためにドラフトを読むのは常識。
そうでないとまた知ったか厨が余計な口出しをし出してスレが荒れるからな。
0699デフォルトの名無しさんNGNG
>>698
ググって探せばないこともないけど、
正式に読もうとすると有料っていうのはちょっとね…
0700デフォルトの名無しさんNGNG
>>697
ありがとうございます。
では、yだけ初期化したいときは?
0701デフォルトの名無しさんNGNG
>>699
一個古い規格だけど最低ここは読もうよ。テンプレにもあるけど。
http://www.kuzbass.ru/docs/isocpp/
0702681NGNG
すみません
681と682は他の環境ではエラーでないでしょうか?
0703デフォルトの名無しさんNGNG
>>702
内側の i が外側の i を隠蔽するだけで、文法的には何ら間違いはない。
0704デフォルトの名無しさんNGNG
ちなみにVC7.1では681も682もノーエラーで、内側の i の値が表示される。
0705デフォルトの名無しさんNGNG
あんまり難しく考えるな。頭禿げるぞ。
0706デフォルトの名無しさんNGNG
>>705
禿じゃないとC++の設計はできないらしいよ
0707デフォルトの名無しさんNGNG
よくわかったな。もうハゲてます。
0708681NGNG
>>705
最近ちょっと上達の兆しがあります
家系的に私はBjarneを超えるはずです

みなさんどうもありがとう
0709デフォルトの名無しさんNGNG
>>708
> 家系的に私はBjarneを超えるはずです
ここに激しく同情しますな

#おれもな〜
0710デフォルトの名無しさんNGNG
確かにobsoleteなC++だとfor文で定義した変数はfor文を終了しても
生き続けるから>>681は問題があるかもしれないが、VC6が今手元に
ないので実験できない。

gccなら古いC++にするオプションがあったかもしれないが覚えてない。
0711デフォルトの名無しさんNGNG
>>710
-fno-for-scope
0712デフォルトの名無しさんNGNG
>>711
�dクス。-fno-for-scopeと-ffor-scopeの両方でgcc3.4.2('MinGW)で試してみたが
出力結果には差がありませんでした。

但しforループを完全に抜けた後で
 std::cout << i << std::endl;
の一行を付け加えると、-fno-for-scopeは古いC++の動作通り 10 が出力され
ました。-ffor-scopeでは当然ですがコンパイルエラーになりました。
0713デフォルトの名無しさんNGNG
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。
0714デフォルトの名無しさんNGNG
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。
0715デフォルトの名無しさんNGNG
VC++7.1付属のSTLってスレッドセーフですか?
スレッドセーフじゃないならSTLPortに置き換えちゃおうと思うんですが。
0716デフォルトの名無しさんNGNG
>>713
宿題スレへGo!
0717デフォルトの名無しさんNGNG
VC++7.1持ってんならヘルプにもろ「Thread Safety in the Standard C++ Library」って項目あるだろうが。
0718デフォルトの名無しさんNGNG
>>698
最近の cppll は悪い例だったな。
0719デフォルトの名無しさんNGNG
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。

できれば、夜の7時までにお願いします。その後遊びに行きたいので。
0720デフォルトの名無しさんNGNG
大変だ、後一時間半しかないぞ!
0721デフォルトの名無しさんNGNG
課題
『標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。
また、同じ長さの行は入力した順番に出しなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに入力した出力と、
http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、
最後の 5 行を示しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。』

CとC++のどちらでも構いません。よろしくお願いします。

夜の7時までにお願いします。今コンパ中なんで、帰ったらできてるようにな。
0722デフォルトの名無しさんNGNG
>>721
激しくむかつく奴だな
赤っ恥かいたうえ絶対に単位もらえっこないネタ用意しといてやろうか
0723デフォルトの名無しさんNGNG
>>722
ネタニマジレスカコワルイ
0724デフォルトの名無しさんNGNG
ちなみにそれ、コピペ。俺が答えたのに無視したからな。
http://pc5.2ch.net/test/read.cgi/tech/1100530682/303
0725デフォルトの名無しさんNGNG
>>724
そいつ多分ここにもマルチしてるよ。質問の内容が同じだし。
http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+18210
0726デフォルトの名無しさんNGNG
無視したんじゃなくて、解答してもらえたことすら理解できてないんだろう
0727デフォルトの名無しさんNGNG
C++Primerのサンプルコードにこういう行がありました。
typedef vector<string, allocator> textwords;

以下のようにしないとエラーになるんですが、
コンパイラとGCCのSTLのどっちが正しいのでしょうか?
typedef vector<string, allocator<string> > textwords;
0728デフォルトの名無しさんNGNG
>>727
何ページの何行よ?俺も試してみるから。
0729デフォルトの名無しさんNGNG
>>728
ページ数はちょっと分りませんが、chap12のprg12_2.Cです。
gcc−3.4.3で
$g++ prog12_2.C
としただけなので何かオプションが必要なの、かもしれません。
0730デフォルトの名無しさんNGNG
いや、それ以前にallocatorのデフォルトテンプレート・パラメータ値は
存在しないので、前者は明らかな間違い。誤植か、作者のミスだろう。
0731デフォルトの名無しさんNGNG
>>728
日本語版C++Primer第3版なら、P607にあるぞ。

typedef vector<string> textwords;

に直されてる。英語版の原著の間違いだろ。
0732デフォルトの名無しさんNGNG
>>727

typedef vector<string, allocator> textwords;
を受理するためには
template <class STR, template <class X> class ALC>
class vector
{
ALC<STR> for_exsample;
};
のように定義されている必要があるな。
0733デフォルトの名無しさんNGNG
>>730-731 どもです。
私の持ってる英語版のはP583にサンプルコードと同じように載っていました。

またGCCのSTL、bits/stl_vector.hでは
template<typename _Tp, typename _Alloc = allocator<_Tp> >
class vector : protected _Vector_base<_Tp, _Alloc>
のようになっていました。
bits/allocator.hは見てみましたが>>730さんの言うとおりデフォルト
テンプレートパラメータはないようでした。
0734デフォルトの名無しさんNGNG
>>732
template <class STR, template <class X> class ALC = allocator<_Tp> >
class vector : protected _Vector_base<_Tp, _Alloc>
こういうテンプレートの定義はありなんですかね。
0735デフォルトの名無しさんNGNG
>>734
> template <class STR, template <class X> class ALC = allocator<_Tp> >
 template <class STR, template <class X> class ALC = allocator >
ありなら、こうじゃないか
0736デフォルトの名無しさんNGNG
template <class STR, template <class X> class ALC = allocator<STR> >
class vector : protected _Vector_base<STR, ALC>

あ、こうだった。ちょっと調べてきます。
0737デフォルトの名無しさんNGNG
>736
だ〜が〜ら〜,それ通らねえべって.allocator<STR>は型でねーが.
デンプレートデンプレートパラメーダに代入できるわけないべさ.
0738デフォルトの名無しさんNGNG
>>737
template <class STR, template <class> class ALC = allocator>
class vector : protected _Vector_base<STR, ALC<STR> >
あ、こうかな!w
0739デフォルトの名無しさんNGNG
>>493
コンストラクタとデストラクタから仮想関数を呼べないなんて知らなかったよ。。。

明日会社行ったらソースを見直してみます。
0740デフォルトの名無しさんNGNG
厳密に言うと、呼ばれないのはオーバロードされた派生クラスの
仮想関数ってことかな?

派生クラスのコンストラクタ、デストラクタで呼ばれるのは基底クラスの
仮想関数ってことなんだよね?

ほんまかいな。
0741デフォルトの名無しさんNGNG
>>740
>厳密に言うと、呼ばれないのはオーバロードされた派生クラスの
>仮想関数ってことかな?

違う、ctor/dtorを実行中は *this へのメッセージについて virtual の効力がない
0742デフォルトの名無しさんNGNG
まだコンストラクタが呼ばれてない派生先のメンバが呼ばれたらおかしくなるわな。
0743デフォルトの名無しさんNGNG
>>741
同じことを言っているように読めるが。
0744740NGNG
>>493のリンク先を読んだけど、>>740とリンク先で書かれているのは
同じつもりなんだけど…
0745デフォルトの名無しさんNGNG
>>743
オーバーロード != オーバーライド
0746デフォルトの名無しさんNGNG
>>742
なるほど、たしかにそうだね。

ではJavaでは派生クラスのメンバ関数が呼ばれるのはどういうこと
なんだろうか。
0747743NGNG
あぁあああああああああ・・・・orz

死ねよ>>740
何ナチュラルに間違えてんだ。
0748740NGNG
>>745
スマソ たしかにオーバライドですわ。
0749デフォルトの名無しさんNGNG
>>746
Javaは猿でも出来るのが建前だから、
まったく同じはずのコードが場所によって違う振る舞いをするのは好ましくないから
そういう特別扱いはしないことにした、そうだ。

なんかJavaって仕様策定してるやつらも猿なんだなぁ。
かえって厄介な問題を内包させただけじゃん。
0750デフォルトの名無しさんNGNG
コンストラクタでは仮想関数によるテンプレートパターンが使えないんだよねー
0751デフォルトの名無しさんNGNG
コンストラクタとデストラクタを通常の関数と同じように考えてはいかんということでしょ
0752デフォルトの名無しさんNGNG
質問です。
ワケあって、int,float,double,boolなど、型の異なる要素の入り混じった
リスト(配列でもいいです)を実現したいのですが(・∀・)イイ!!方法はないでしょうか。
初めポリモフィズムを試したのですが、自分がやりたい事と微妙に違っていましたし、
力技でこの構造を実現しようとすると、どんどん構造やUIがブサイクになっていってしまいますた。
0753デフォルトの名無しさんNGNG
>>752
union
0754デフォルトの名無しさんNGNG
boost::any
0755デフォルトの名無しさんNGNG
どちらにせよ取り出すときに型情報の指定が必要になる罠
0756デフォルトの名無しさんNGNG
>>755
C++を使う以上、どうしようもないよね。
0757デフォルトの名無しさんNGNG
( ´,_ゝ`)プッ

曖昧さがもたらす混乱と決別する気はないのかよ、お前ら。
0758デフォルトの名無しさんNGNG
要素数と順番が固定なら、boost::tupleも使えるかもね。
0759デフォルトの名無しさんNGNG
Ruby最強と言うことでファイナルアンサー?
0760デフォルトの名無しさんNGNG
類の要員函數を静的にせずに呼び返し函數の引数として
与えるにはどうしたらいいの?
0761デフォルトの名無しさんNGNG
>>760
氏ね
0762デフォルトの名無しさんNGNG
->より-+>の方がかっこよくね?
0763デフォルトの名無しさんNGNG
->より-|>の方がかっこよくね?
0764デフォルトの名無しさんNGNG
->より→の方がかっこよくね?
0765デフォルトの名無しさんNGNG
-> より ☞ の方がかっこよくね?
0766デフォルトの名無しさんNGNG
APL っぽくなってまいりました。
0767デフォルトの名無しさんNGNG
なぜそれでUIがブサイクになるのか教えてくれ。
0768デフォルトの名無しさんNGNG
C++の規格書の新しい奴は丁寧なつくりのPDFになっているでしょうか?
目次やリンクが張られたものになっているのでしょうか?
14882(1998)みたいに雑なつくりなら買いたくないので。
0769デフォルトの名無しさんNGNG
>>768
雑。
0770デフォルトの名無しさんNGNG
>>752
boost::variant

>>760
呼び返し函数の仕様による。
0771デフォルトの名無しさんNGNG
int a = 0;
int a(0);

どうちがうんですか?
0772デフォルトの名無しさんNGNG
違わない。
0773デフォルトの名無しさんNGNG
>>771
もう一つこういう書き方もOKらしい。
int a = int(0);
0774デフォルトの名無しさんNGNG
std::random_shuffleを要素が二つのものに対して行うと必ず入れ替わるのですが、
入れ替わることもあれば入れ替わらないこともあって欲しい場合にはどうすればいいのですか?
0775デフォルトの名無しさんNGNG
>>772-773
わかりました。
0776デフォルトの名無しさんNGNG
random_shuffleをrand()回繰り返す
0777デフォルトの名無しさんNGNG
>>776
いや〜ん。素晴らしい!
my_random_shuffle書いてたけどそれにします
0778デフォルトの名無しさんNGNG
>>774
初めて知った。
全然ランダムになっとらんやん。
0779デフォルトの名無しさんNGNG
その代わりランバダになってるよ。
0780デフォルトの名無しさんNGNG
じゃあ俺ガンダムになる。
0781デフォルトの名無しさんNGNG
>>774
rand()の戻り値の最下位ビット判定でswap()するかどうか決めるんじゃ駄目なのか?
0782デフォルトの名無しさんNGNG
>>781
rand()が最下位ビットが0と1交互に出てくる乱数の場合もあるだろ…
0783デフォルトの名無しさんNGNG
VC++のヘルプ曰く、
「範囲 [1, last - first) 内の各 N に対して swap(*(first + N), *(first + M)) を 1 回評価します。M は、範囲 [0, N) 全体に対する一様乱分布の値とします。つまり、関数はシーケンス内の要素の順序をランダムにシャッフルします。」
なんで、要素数2なら確実に毎回交換されるだろうな。


0784デフォルトの名無しさんNGNG
相談なんですが 別アプリのソフトのコンボボックスのメッセージを
フックしてメモ帳に書き込むことは可能ですか?
 良ければサンプルソースなどお願いします。
0785デフォルトの名無しさんNGNG
>random_shuffle
ごくふつーにライブラリのバグじゃん
やること決まってるし・・・
0786デフォルトの名無しさんNGNG
>>782
初めて聞いた。
早速ですが具体例を挙げてください。
OS名・コンパイラ名・srand()の乱数種の数値を添えてください。
できればコンパイルオプションも添えてもらいたいです。

みんな興味を持ってると思うので後学のために是非書いてください。
お願いしますよ >>782さん、期待してますんで。
0787デフォルトの名無しさんNGNG
昔のrand()で32bit(31bit?)ぐらいの精度の時の乱数は0と1が交互にでてきったとか・・・聞いたことがある
漏れの記憶でのお話です
0788787NGNG
私は782じゃありません
0789デフォルトの名無しさんNGNG
それってrand()の下位ビットの周期が短いって話と混同してないか?
0790デフォルトの名無しさんNGNG
>>786
俺は782じゃないが、自分でググれ。
0791デフォルトの名無しさんNGNG
>>789
処理系によってはマジでそういうのがあるのよ。
0792デフォルトの名無しさんNGNG
そこでムェルセンヌツィスタァですよ
0793デフォルトの名無しさんNGNG
>>792
それ、メモリ喰い過ぎ
0794デフォルトの名無しさんNGNG
手軽な乱数ルーチンって何があるの?
0795デフォルトの名無しさんNGNG
>>794
rand()
0796デフォルトの名無しさんNGNG
>>795
rand()が最下位ビットが0と1交互に出てくる乱数の場合もあるだろ…
0797デフォルトの名無しさんNGNG
>>796
それってrand()の下位ビットの周期が短いって話と混同してないか?
0798デフォルトの名無しさんNGNG
ユニコードでの文字処理に関してなのですが、
VC6で_MBCSを削除し_UNICODEとUNICODEを追加してユニコード対応にしました。
LPTSTR a;
_tcscpy(a, _T("ハロー"));
このコードがビルドは通るのですが、実行するとエラーになるのです。エラー個所は_tcscpyが展開された
wchar_t * __cdecl wcscpy(wchar_t * dst, const wchar_t * src)
{
wchar_t * cp = dst;

while( *cp++ = *src++ )
; /* Copy src over dst */

return( dst );
}
のwhile文で起こっています。どこが間違っているのか教えていただけるでしょうか。
0799デフォルトの名無しさんNGNG
LPTSTRは実質wchar_t*なわけだが。で、ポインタaはどこを指してるんだ?
0800デフォルトの名無しさんNGNG
>>799
初めて聞いた。
早速ですが具体例を挙げてください。
OS名・コンパイラ名・srand()の乱数種の数値を添えてください。
できればコンパイルオプションも添えてもらいたいです。

みんな興味を持ってると思うので後学のために是非書いてください。
お願いしますよ >>799さん、期待してますんで。
0801デフォルトの名無しさんNGNG
copipe uzai
0802デフォルトの名無しさんNGNG
思うんだが、>>786って、なんというか、小学生がよく言う、
「何年何月何日何分何秒に!?」ってやつと同じ匂いがするよな。
0803デフォルトの名無しさんNGNG
>>801
そーゆー方面の文句ある奴は煽ってねえで削除板池
礼儀を諭しているつもりか知らんが自分が反則してることに気付よ早く
0804気付よNGNG
気付よ
0805デフォルトの名無しさんNGNG
ハァ????
0806デフォルトの名無しさんNGNG
ああ機能の人格障害君か
・・・放置
0807デフォルトの名無しさんNGNG
メモリを初期化する関数でmemsetってありますよね。
現場のコーディングルールで、構造体を使う時は、必ずmemsetで初期化しなさいと言われたので、
「なんで?」って聞いたら、「常識だろ?」って怒られちった・・・。

常識のない私に理由を教えてくれる人がいるとすごくうれしいです。
0808デフォルトの名無しさんNGNG
>>807
非常識はコーディングルールにゴネたこと
0809デフォルトの名無しさんNGNG
>>807
ああ、それは馬鹿がやることだ。
0810デフォルトの名無しさんNGNG
C++ならコンストラクタで初期化すりゃいいのに。
0811デフォルトの名無しさんNGNG
>>809
そういえばstaticも馬鹿だな
0812デフォルトの名無しさんNGNG
構造体の初期化なら={0};じゃないのか。
0813デフォルトの名無しさんNGNG
>>807
理由はこうだ。

int *a = new int
*a = 123;

delete a;

int *b = new int

cout << *b << endl;


ってやると、bが123として表示される。
つまり、単にゴミデータが残るのならまぁ許すとして、前にnewしたときに
設定したデータが、後でゴミとして残ってしまう。
このようなリスペクトなバグは排除したほうがよい。

ちなみに、問題なのはヒープ領域であって、スタック領域だと、自動的に初期化してくれるので問題なし!


0814デフォルトの名無しさんNGNG
new String と new String() の意味は同じであるが、
クラスではなく int などのスカラー型の場合、標準の5.3.4節では
前者の形式では割り当てられたオブジェクトの値は不定になり、
後者の形式ではメモリは0で初期化されるということを明記している

C++プログラミングの処方箋より抜粋


つまり int *b = new int(); とすればmemsetなどは必要なし?
0815デフォルトの名無しさんNGNG
>>802
小学生呼ばわりでも全然構わない。
お前が実例・具体例を挙げれば全て解決する。
処理系がある、だけではわからん。
rand()で奇数と偶数が交互に返される実装があるんだろ?
ライブラリの名前だけでも書けよ、礼儀として。
0816デフォルトの名無しさんNGNG
>>802
小学生呼ばわりでも全然構わない。
お前が実例・具体例を挙げれば全て解決する。
処理系がある、だけではわからん。
rand()で奇数と偶数が交互に返される実装があるんだろ?
ライブラリの名前だけでも書けよ、礼儀として。
0817デフォルトの名無しさんNGNG
>>802
小学生呼ばわりでも全然構わない。
お前が実例・具体例を挙げれば全て解決する。
処理系がある、だけではわからん。
rand()で奇数と偶数が交互に返される実装があるんだろ?
ライブラリの名前だけでも書けよ、礼儀として。
0818デフォルトの名無しさんNGNG
>>802
小学生呼ばわりでも全然構わない。
お前が実例・具体例を挙げれば全て解決する。
処理系がある、だけではわからん。
rand()で奇数と偶数が交互に返される実装があるんだろ?
ライブラリの名前だけでも書けよ、礼儀として。
0819デフォルトの名無しさんNGNG
池沼
0820デフォルトの名無しさんNGNG
また出たよ母親に問題あるやつ
0821デフォルトの名無しさんNGNG
>>815
お前も人に聞く前に少しくらいググれよ、礼儀として。
0822デフォルトの名無しさんNGNG
あ、そーなのー・・・ぐらいで軽く流せないのかね
会社で相当いじめられてるのは同情するけどさ
0823デフォルトの名無しさんNGNG
Ruby最強!
0824デフォルトの名無しさんNGNG
よっぽど悔しかったんだね
0825815NGNG
>>816-818
コピペは止めてもらえないだろうか。こちらは真面目に質問している。
具体例を挙げるべき人が荒らしているのかもしれないが、
そんな暇があったら名前を挙げてくれればよいのに。実に簡単なことだろ?
0826デフォルトの名無しさんNGNG
恥ずかしい香具師とはいっしょにいたくないよね。
仲間と思われたくないし。
0827デフォルトの名無しさんNGNG
>>797
俺だったら、これが真実だとしても全然問題ないと思うんだが
0828デフォルトの名無しさんNGNG
検索すらろくに出来ないような低脳じゃ同僚に冷たくあしらわれても仕方ないわな
しかしその憂さ晴らしをここでするのは勘弁してもらいたいな
0829デフォルトの名無しさんNGNG
同僚がでてきたぞw
0830デフォルトの名無しさんNGNG
>>825
本当に真面目に訊いてんだったらちょっとでいいからググってみれ。
それで本当に見つけれないんだったらお前、プログラマとしてちょっとヤバイぞ。
0831デフォルトの名無しさんNGNG
ここは質問するためのスレじゃないの?
検索しろで済ますのならスレ自体いらんでしょ。
0832デフォルトの名無しさんNGNG
デフォルトコンストラクタって0で初期化してくれなかったっけ?
0833デフォルトの名無しさんNGNG
MacOS X & ProjectBuilder & SDLでLifeゲームを作ってたんだけどどうもおかしい。
Win2000 & BCC32の時にうまく動いてたコードをそのままコンパイルしたんだけど縞々模様が出たまま動かない。
初期化するときに(rand() % 2)を使ってるんだけど良く見てみるとrand()が奇数と偶数を交互に返してる(ぉぃぉぃ。
srand()以外になんか準備がいるんすかぁ?
0834デフォルトの名無しさんNGNG
UNIX の /usr/ucb/cc、gcc、g++を解析した結果、 rand( ) は以下の動作をすることがわかった。

static long x=1;
void srand(unsigned s) { x=s; }
long rand() { x=x*1103515245+12345; return x&2147483647; }

これは、非常にシンプルな線形合同法である。この乱数の最下位ビットは0と1の繰り返しになる。
すなわち、偶数と奇数が交互に生成される。このことから、この乱数で下位ビットを乱数として使うのは危険であることがわかる。
また、ある乱数が得られたら、次に現れる乱数が1種類しかないという欠点も持つ。
0835デフォルトの名無しさんNGNG
>>831
まったくだ
何かディープに勘違いしてる「回答者」には困ったものだな
0836デフォルトの名無しさんNGNG
あーあツマンネ
0837デフォルトの名無しさんNGNG
おこんばんは、お願いいたします。
ステップ実行時、「ほにゃららDllが見つかりません」と言われます。

とあるexeから、自分の作っているdllを呼ぶ処理です。
プロジェクトの「設定」で、とあるexeを指定して、
そのexeでファイル選択をすると、
自分のdllのソースのブレークポイントで止まってくれる予定なのですが。。。


プロジェクトの「設定」のどこかに、
関連するdllを列挙する必要って、ありましたっけ?
何が設定不足なのでしょうか?
よろしくお願いいたします。
0838デフォルトの名無しさんNGNG
そうだ、このスレはそもそも必要なかったのだ。

我々はぁぁ!
この(類の)スレのぉぉ!
永久停止を要求するぅぅ!
0839デフォルトの名無しさんNGNG
Rubyで全部解決すると言っておろうが!
0840815NGNG
>>833-834
降参します。orz
0841デフォルトの名無しさんNGNG
>>837
スレ違い。自分が使用している開発環境の専用スレに逝け。
0842デフォルトの名無しさんNGNG
>>831,>>835
検索しても簡単にわからんことなら仕方がないが、
検索すればすぐに分かるようなことを検索するように勧めても
尚、検索しようともしない馬鹿の言い訳にはならない。
0843デフォルトの名無しさんNGNG
まさか本当に検索できなかったわけじゃないよな?
0844デフォルトの名無しさんNGNG
水に落ちた犬は(ry かよ。お前らも容赦ないなwwwwwwwwwwwww
0845デフォルトの名無しさんNGNG
福祉施設職員を少しは見習ってもらいたいものだ。
0846デフォルトの名無しさんNGNG
>>842
キーワードでも示してやったら? 「回答者」さん
0847デフォルトの名無しさんNGNG
"rand 偶数 奇数 交互"
0848デフォルトの名無しさんNGNG
まさかキーワードが思い浮かばなかったわけじゃないよな?
0849デフォルトの名無しさんNGNG
すんません。三行三列と三行二列の行列の積を求める書き方教えてください。
めんどくさかったら軽いヒントでもいいんで
ちなみに初期数値は与えられてます。forを使うみたいですがいまいち・・・
0850デフォルトの名無しさんNGNG
まさか検索エンジンが思い浮かばなかったわけじゃないよな?
0851デフォルトの名無しさんNGNG
テンプレにgoogleのURLが必要なのだろうかw
0852デフォルトの名無しさんNGNG
>>849
数学板逝け
0853デフォルトの名無しさんNGNG
>>849
教科書嫁
0854デフォルトの名無しさんNGNG
>>848
まさか答えがわからなかったわけじゃないよな? 「回答者」さん
0855デフォルトの名無しさんNGNG
|abc||pq|
|def||rs|=ap+br+ct+dp+...+fs+iu
|ghi||tu|
0856デフォルトの名無しさんNGNG
>>844
水に落ちた犬は・・・の続きは何?
「水に落ちた犬を打つ」があるけど、それとは違うっぽいのでググッたほうがいいのかな。
0857デフォルトの名無しさんNGNG
Linux&g++でシステムコールを使う時について質問します。
gccで.h等をインクルード無しで使えていたread(,,)等のシステムコールがImplisitエラーを出します。
g++になってシステムコールの使用法に変化があるのでしょうか?
0858デフォルトの名無しさんNGNG
このスレはC++相談室なわけだが・・・
0859デフォルトの名無しさんNGNG
Implisitってなんですか
0860デフォルトの名無しさんNGNG
>>848
実際、そういう人もいるよ。
多分、>>846もそういう人なんだろ。
0861デフォルトの名無しさんNGNG
C++の仕様が原因かどうかを論じるならスレタイ合致だな
0862デフォルトの名無しさんNGNG
>>857
man readして必要なヘッダをインクルードしろ。C++では宣言無しでは関数は使えない。
0863デフォルトの名無しさんNGNG
>>862
だったらコンパイルエラーのはずだ
857 を読む限り実行時の障害のように聞こえる
0864デフォルトの名無しさんNGNG
おいおいおいおいいおいおいおいおい
0865デフォルトの名無しさんNGNG
>>864
コンパイルエラーのメッセージテキストには implicit なる語は出てこないだろ
0866デフォルトの名無しさんNGNG
>>865
出るよ
0867デフォルトの名無しさんNGNG
implicit declaration of function です。
コンパイルエラーです。
文字と>>862さんから推察するとgccでは暗黙の宣言として使っていたのが
g++では使えなくなったということですね。
方法を探してみます。ありがとう御座いました。
0868デフォルトの名無しさんNGNG
$ g++ test01.cpp
test01.cpp: In function `int main()':
test01.cpp:3: error: `read' undeclared (first use this function)
test01.cpp:3: error: (Each undeclared identifier is reported only once for each
function it appears in.)
0869デフォルトの名無しさんNGNG
>>867
g++というよりc++でだよ
0870デフォルトの名無しさんNGNG
>>869これはすいませんでした。仕様を間違えてはいけませんね。
#include <unistd.h> が必要でした。
皆さんありがとう御座いました。
0871デフォルトの名無しさんNGNG
std::string が空文字列で初期化されることって保証されてるんですか?
0872デフォルトの名無しさんNGNG
std::listってクイックソート出来ないんですか?
std::sortは使えないし
0873デフォルトの名無しさんNGNG
>>872
std::list::sort()ってメンバ関数はマージソート(安定ソート)だがなかなか速い。
O記法によるオーダもO(NlogN)でクイック・ソートと同じだし。但し平均的な
コンピュータのアーキテクチャではクイック・ソートの1/2程度の速度になる。
0874782NGNG
uwaaaaヽ(`Д´)ノaaaan
0875デフォルトの名無しさんNGNG
こういうのって、foo が先に初期化されるのか、
Base が先に初期化されるのか、どちらでしょうか?

class Hoge : Base {
  Foo foo;
public:
  Hoge(void) : foo(100), Base(&foo) {}
};
0876デフォルトの名無しさんNGNG
>>875
FooとBaseのコンストラクタにプローブ入れて試せば?
0877デフォルトの名無しさんNGNG
>>875
コンストラクタ
ベース→メンバ(宣言した順)→自身
デストラクタ
自身→メンバ(宣言と逆順)→基底
0878デフォルトの名無しさんNGNG
じゃぁ、Base で Foo の関数を呼び出すことはできないのですね。
それは不便ですねぇ。。。
0879デフォルトの名無しさんNGNG
Baseの初期化にFooが必要なら、BaseにFooを持たせてしまえば?
0880デフォルトの名無しさんNGNG
いえ、Foo は FooBase を継承するクラスで、
Base のコンストラクタは FooBase* なら何でもとるのです。
Base のコンストラクタで FooBase の関数を呼び出したいのです。
0881デフォルトの名無しさんNGNG
>>880
設計見直せ
0882デフォルトの名無しさんNGNG
>>881
ありがとう。見直してみます。
だけど、C++ ってここらへんがぎこちないですね。
初期化リストの記述順に初期化してくれればいいのに。。。
0883デフォルトの名無しさんNGNG
>>882
よく考えろボケ
0884デフォルトの名無しさんNGNG
君の頭の方がぎこちないです。
0885デフォルトの名無しさんNGNG
C++のぎこちなさが嫌だったらさっさと他の言語に乗り換えて下さいです。。
0886デフォルトの名無しさんNGNG
ひろゆきキター
0887デフォルトの名無しさんNGNG
??
0888デフォルトの名無しさんNGNG
キャッシュを行うクラスを作ろうと思います。

// int から int への関数のキャッシュを行うクラス。
class Cache {
public:
    typedef int (*Func)(int n);
private:
    map<int,int>    _map;
    Func            _func;
public:
    Cache(Func func) : _func(func) {}

    int Get(int n)
    {
        int result;
        map<int,int>::const_iterator it = _map.find(n);
        if (it == _map.end()) {
            result = _func(n);
            _map.insert(map<int,int>::value_type(n, result));
        }
        else {
            result = (*it).second;
        }
        return result;
    }
};
0889デフォルトの名無しさんNGNG
class SomeFunc {
private:
    Cache _cache;
    static int Plus1(int n) { return n + 1; }
public:
    SomeFunc(void) : _cache(Plus1)
    {}

    int Get(int n) 
    {
        return _cache.Get(n);
    }
};
0890デフォルトの名無しさんNGNG
この Func を C 関数や静的関数ではなく、
メンバ関数とするにはどうしたらよいでしょうか?
よろしくお願いします。
0891デフォルトの名無しさんNGNG
boostのfunction&bindかな
0892デフォルトの名無しさんNGNG
>>890
template <typename T>
class Cache {
public:
typedef int (T::*Func)(int);
private:
map<int,int> _map;
T *obj_;
Func _func;
public:
Cache(T *obj, Func func) : obj_ (obj), _func(func) {}
int Get(int n) {
int result;
map<int,int>::const_iterator it = _map.find(n);
if (it == _map.end()) {
result = (obj_->*_func)(n);
_map.insert(map<int,int>::value_type(n, result));
} else {
result = (*it).second;
}
return result;
}
};
class SomeFunc {
private:
Cache <SomeFunc> _cache;
int Plus1(int n) { return n + 1; }
public:
SomeFunc(void) : _cache(this, &SomeFunc::Plus1) {}
int Get(int n) {return _cache.Get(n);}
};
0893デフォルトの名無しさんNGNG
>>890
Cacheをテンプレートクラスにすれば
0894デフォルトの名無しさんNGNG
ご回答ありがとございます。m(__)m
>>891
ごめんなさい、boost はできるだけ使いたくないんです。。。
同じようなことを手動でやれればいいのですが。
>>892 >>893
やっぱりテンプレート使わないといかんですか。うーん。
0895デフォルトの名無しさんNGNG
1クラス1キャッシュでいいなら
継承使ってできそうな気がしなくもない
0896デフォルトの名無しさんNGNG
それは、SomeFunc を Cache から派生させるということですよね。
SomeFunc はすでに別のクラスから派生しているんです (多重継承はあまりしたくない)。
それに Cache という機能単位を継承で使うのはよい設計ではないように
思いますが、いかがでしょうか。
0897デフォルトの名無しさんNGNG
>>896
>それに Cache という機能単位を継承で使うのはよい設計ではないように
>思いますが、いかがでしょうか。
まそうだろうね
boostとかテンプレートとか躊躇してるのは何で?

0898デフォルトの名無しさんNGNG
> boostとかテンプレートとか躊躇してるのは何で?
テンプレートにいい思い出がないのが一番の理由です。
今 VC6 を使っているんですけど、
テンプレートの一部の機能が使えなかったり、
複雑になるとバグが発生したりして、
使いすぎると生産性が確実に低下するように思います。

あと、できるだけ外部のライブラリに依存したくないという意味で
boost は使いたくないわけです。
0899デフォルトの名無しさんNGNG
VC6はご愁傷様です

>できるだけ外部のライブラリに依存したくない
この方針があなたの決断によるものなら考え直した方がいいと思いますよ
これじゃライブラリの立つ瀬が無いですからね
0900デフォルトの名無しさんNGNG
アンチパターンに当てはまりまくりだな
0901デフォルトの名無しさんNGNG
貧乏人がWindowsのプログラム書くなよ
0902デフォルトの名無しさんNGNG
なんかlinuxerは貧乏人みたいにとれるな
0903デフォルトの名無しさんNGNG
関数内のstatic変数は、最初にその関数が呼ばれたときに初期化されるそうですが
例えば

class Hoge {...];

void foo() {
static Hoge hage;
}

というのがあって、複数のスレッドがfooを同時に呼び出した場合
hageの初期化は同期されるのでしょうか?
0904デフォルトの名無しさんNGNG
金を使わない奴は金がないやつ同様貧乏人。
0905デフォルトの名無しさんNGNG
>>903
C++の規格ではマルチスレッドのことは考えてないので、環境によります。
0906デフォルトの名無しさんNGNG
同期が保証されないから、
MeyersのSingletonはマルチスレッドでは使えない
0907デフォルトの名無しさんNGNG
>>904
感心した
0908デフォルトの名無しさんNGNG
金を使えば技術を得られるわけでもない
0909デフォルトの名無しさんNGNG
>>908
感心した
0910デフォルトの名無しさんNGNG
金を使わないヘタレに存在意義なし
0911デフォルトの名無しさんNGNG
>>910
感心した










とでも言ってもらいたいのか?
0912デフォルトの名無しさんNGNG
借金まみれの俺は金持ち
0913デフォルトの名無しさんNGNG
vector<int> の中に整数が重複して入っていて、
その中の最頻値を取り出したいとします。
このような処理を STL を使って完結に表現することはできるでしょうか?
0914デフォルトの名無しさんNGNG
はい。
0915デフォルトの名無しさんNGNG
どのようにすればできるか教えていただけるでしょうか。
0916デフォルトの名無しさんNGNG
>>915
誰か教えてくれるでしょう。
0917デフォルトの名無しさんNGNG
クォータニオンまで扱える算術ライブラリってDirectX以外でありますか?
漫然と>>8を眺めてみたのですが、いまいち見つかりませんで

DirectXの物は中々使い心地が良いのですが、DirectXが使えない環境になりそうで困っています
0918デフォルトの名無しさんNGNG
boost::quaternion
0919デフォルトの名無しさんNGNG
クォータニオンなんて自作したって
1、2時間でできるんでは?
0920デフォルトの名無しさんNGNG
>>918
BLAS…というかnumericの所しか見てなかったですよ
boost凄いなぁ…ありがとうございました、勇んでいじってみます
0921デフォルトの名無しさんNGNG
>>919
まぁ、実際そうで、私も自前(と言ってもほぼとあるオープンソースのパクリ)のはあるのですが
自前だとまずい部分が色々とあったりで…boost情報助かりました
0922デフォルトの名無しさんNGNG
>>915
あいよっ
template <typename T, template <typename> class Container> inline
pair <T, size_t> mode_count (const Container <T> &p) {
typedef std::map <T, size_t> Counter_Register;
Counter_Register counter_register;
for (typename Container <T>::const_iterator itr (p.begin ()), last (p.end ());
itr != last; ++ itr) ++ counter_register [*itr];
struct Local {
typedef typename Counter_Register::value_type Value_Type;
static bool less_by_second (const Value_Type &lhs, const Value_Type &rhs) {return lhs.second < rhs.second;}
};
return *max_element (counter_register.begin (), counter_register.end (), &Local::less_by_second);
}
template <typename T, template <typename> class Container> inline
T mode (const Container <T> &p) {
return mode_count (p).first;
}
もっとエレガントなのは誰か教えてくれるでしょう。
0923913NGNG
>>922
すいません。ありがとうございます。
自分でも作ってみたのですが、あまりきれいになりませんでした。
よく読んでみます。とりいそぎ、お礼まで。
0924デフォルトの名無しさんNGNG
>>922
>template <typename T, template <typename> class Container> inline
template templateパラメータはテンプレートパラメータの数がデフォルトも全部展開した
数に一致して無いといけないので,STLのシーケンスを取るならパラメータ2つ要りますよ.
あとTはContainer::value_typeで取れるから結局コンテナの型をパラメータにするのが
妥当だと思うんですけどね.

template<typename Container>

細かいツッコミ失礼.ちなみに自分ならiteratorを引数にしたいかも.
0925デフォルトの名無しさんNGNG
>>922
Local::less_by_secondはローカルだけどテンプレート引数に出来るの?
0926デフォルトの名無しさんNGNG
>>924
やっぱ修正するのはオイラかい?
template <typename Iterator> inline
pair <typename Iterator::value_type, size_t> mode_count (Iterator first, Iterator last) {
typedef typename Iterator::value_type Value_Type;
typedef std::map <Value_Type, size_t> Counter_Register;
Counter_Register counter_register;
for (; first != last; ++ first) ++ counter_register [*first];
struct Local {
typedef typename Counter_Register::value_type Value_Type;
static bool less_by_second (const Value_Type &lhs, const Value_Type &rhs) {return lhs.second < rhs.second;}
};
return *max_element (counter_register.begin (), counter_register.end (), &Local::less_by_second);
}
template <typename Iterator> inline
typename Iterator::value_type mode (Iterator first, Iterator last) {
return mode_count (first, last).first;
}
template <typename Container> inline
pair <typename Container::value_type, size_t> mode_count (const Container &p) {
return mode_count (p.begin (), p.end ());
}
template <typename Container> inline
typename Container::value_type mode (const Container &p) {
return mode (p.begin (), p.end ());
}
もっといいアルゴリズムはないの?
0927922 == 926NGNG
>>925
g++(3.3.4)だと通るんだけどまづいっけ?

>>924
それと言い忘れたありがとう
925も
0928デフォルトの名無しさんNGNG
>>925
ローカルクラスがテンプレート引数に出来ない問題との違いは,
型が外部リンケージを持っているかどうか.
Local::less_by_secondの型はbool (*)(Value_Type const &, Vlue_Type const &)で,
これは外部リンケージを持った型なのでテンプレート引数に出来るはず.
0929デフォルトの名無しさんNGNG
std::stringの変数にabcが入っていたとします。
で、この変数にabc又はABCが入っていることをエレガントに確認するにはどうしたらよいでしょうか?
(つまり、小文字、大文字意識せずに、findしたいってことです)

0930デフォルトの名無しさんNGNG
>>929
私はいつも stricmp(str.c_str(), "abc") しているけど、C++ 的にはどうやるんかな。
0931デフォルトの名無しさんNGNG
>>930
>>929をよく読むこと。
0932デフォルトの名無しさんNGNG
>>929
面倒なのでboost::regex
0933デフォルトの名無しさんNGNG
STL の string って貧弱だよな。
もっとメンバ関数充実させてほしい。
0934デフォルトの名無しさんNGNG
そこでRubyですよ
0935デフォルトの名無しさんNGNG
>>933
うん、激しく同意。
俺が思うに、これは何かの陰謀が働いていると思う。
0936デフォルトの名無しさんNGNG
そこでRubyですよ
0937デフォルトの名無しさんNGNG
そこでboost string algorithm
0938モウモウNGNG
>>929
一応こんなんでできるけど。

struct CharEqualIC {
    inline bool operator() (char c1, char c2) 
    {
        return (toupper(c1) == toupper(c2));
    }
};

int main(void)
{
    string str1 = "xxxx Abc xxxx";
    string str2 = "abc";

    string::iterator it = search(str1.begin(), str1.end(), str2.begin(), str2.end(), CharEqualIC());
    cout << (it - str1.begin());

    return 0;
}
0939デフォルトの名無しさんNGNG
>>938
汚物
0940デフォルトの名無しさんNGNG
>>929
std::string str = "fgafjkAbCasln;tj";
std::cout << boost::algorithm::ifind_first(str, "abc").begin() - str.begin() << std::endl;
// 6が出力される。

std::string str = "fgafjkasln;tj";
std::cout << boost::algorithm::ifind_first(str, "abc").begin() - str.begin() << std::endl;
// 13が出力される。すなわちboost::algorithm::ifind_first(str, "abc").begin()==str.end()
0941デフォルトの名無しさんNGNG
>929
std::mismatch 使って頑張れ

Effective STL の35項も参考になる。
0942デフォルトの名無しさんNGNG
>>922,926
Iterator::value_type ではポインタを渡したときにエラーになる
※入力シーケンスは空でないという事前条件が必要

template<typename Iterator>
std::pair<typename std::iterator_traits<Iterator>::value_type, std::size_t> mode_count(Iterator first, Iterator last)
{
  typedef typename std::iterator_traits<Iterator>::value_type value_type;
  typedef std::pair<value_type, std::size_t> result_type;
  std::map<value_type, std::size_t> counts;
  result_type const* max = 0;
  for(; first != last; ++first)
  {
    result_type& counted = counts[*first];
    ++counted.second;
    if(!max || counted.second > max->second)
      max = &counted;
  }
  return *max;
}
0943デフォルトの名無しさんNGNG
値を返す関数の戻り値をconst参照で受け取ったらまずいですか?

extern XXX get_value();

const XXX& xxx = get_value();

テンポラリへの参照になってしまうんでしょうか?
最適化をするとおかしくなってしまうようなんです
0944デフォルトの名無しさんNGNG
>>943
クラスのインスタンスのデータメンバや静的データメンバ、
関数の静的変数、大域変数、静的変数を返したいときは、
const参照を返してもだいじょうぶ。

const参照を返したら駄目なのは関数内のローカル変数。
0945デフォルトの名無しさんNGNG
>>943
あー、その場合の寿命ってどうなるんだろうな。
規格書読まなきゃわかんないな。

でもこのケースだったら無難に
const XXX xxx = get_value();
でいいんじゃないの。
0946デフォルトの名無しさんNGNG
バカばっかり
テンポラリに決まってんだろ
禿本くらい読め
0947デフォルトの名無しさんNGNG
>943
その関数の戻り値であるところのテンポラリは,規格としては
const参照のlife-timeまで寿命が延びる(12.2/5)ので大丈夫なはずです.
http://www.kuzbass.ru:8086/docs/isocpp/special.html#class.temporary
なので,
>最適化をするとおかしくなってしまうようなんです
というのはプログラムがおかしいかコンパイラが規格に準拠していないか・・・.
で,結論としては945さんに同意.

>944
多分文脈を読み間違えているかと.
0948デフォルトの名無しさんNGNG
template <class Container, class T>
inline Container makeContainer(const T& t)
{ return Container(boost::begin(t), boost::end(t)); }

typedef std::vector<char> CharVec;

const char* p = "Hello, world";
CharVec c(makeContainer<CharVec>(p));

これがコンパイル通らないんですが仕様でしょうか…?
makeContainer(T& t) にすると大丈夫なんですが…
0949デフォルトの名無しさんNGNG
boost知らんけど、ポインタなんだか参照なんだかしっちゃかめっちゃかだな。
0950デフォルトの名無しさんNGNG
>948
boost::begin/endがchar const * constに対応してないのが原因.
というか,そういうことがしたいなら以下で良いのでは?

CharVec c(boost::begin(p), boost::end(p));
0951デフォルトの名無しさんNGNG
>948
追記.char (const) * constはRangeのモデルにならないです.
動かせないポインタ渡されて'\0'探せって言われても困るでしょ.
もし,その枠組みでやるなら以下か

CharVec c(makeContainer<CharVec>(boost::make_iterator_range(p)));

もしくはmakeContainerをchar (const) *について特殊化するか,かな.
0952951NGNG
-もしくはmakeContainerをchar (const) *について特殊化するか,かな.
+もしくはmakeContainerをchar const *についてオーバーロードするか,かな.
0953デフォルトの名無しさんNGNG
> 追記.char (const) * constはRangeのモデルにならないです.
> 動かせないポインタ渡されて'\0'探せって言われても困るでしょ.

ポインタをコピーすれば困らないよ。
range側の特殊化が抜けてるだけじゃないの?
0954デフォルトの名無しさんNGNG
#include <vector>

struct ClassV{
int val;
std::vector<int> vecInt;
};

int main(int argc, char* argv[]){
std::vector<ClassV> vecClassV;

vecClassV.reserve( 5 ); //resizeならBもerrorにならない
for( int i=0; i < 5; ++i ){
vecClassV[i].val = 4649; //errorが出ない …A
}
for( int c=0; c < 5; ++c ){
vecClassV[c].vecInt.reserve(10); //error …B
}
return 0;
}

お願いします、上記のコードなのですが、
恐ろしいことに今までreserveを使いAみたいな事をしていました。
しかしBのようにコンテナを使わない限り、今までの所、特に困ったこともありませんでした。
全て書き直す前にお尋ねしたいのですが、Aが上手くいっていたのは偶然なのでしょうか?
0955デフォルトの名無しさんNGNG
reserveってのはresize時の効率を上げるためにあらかじめ領域を予約するものであって、実際にresizeするまではその領域を使っては*いけない*。
領域自体は確保済みなので一般保護例外などはでないだろうが、vector内部の管理情報は壊れていても不思議ではない。
0956954NGNG
>>955
ありがとうございます。コンテナ以外もたまたま動いていただけなんですね。
全力で全痴漢してきます。
0957デフォルトの名無しさんNGNG
メンバのoperator==はメンバ関数ポインタに入れられないのですか?
0958デフォルトの名無しさんNGNG
↑
std::vector<boost::shared_ptr<Foo> >::iterator i
= std::find_if( hoge.begin(), hoge.end(),boost::bind( &Foo::operator==, _1, foo ) );
としたいのです
0959デフォルトの名無しさんNGNG
std::equal_to
0960デフォルトの名無しさんNGNG
>>958
問題なさそうに見えるが、Foo か operator== のどちらかがテンプレート引数を必要としたりオーバーロードで曖昧になってたりしないか?
0961デフォルトの名無しさんNGNG
>953
やっぱりそうなんですかねぇ.

>958
それだとshared_ptr<Foo>のoperator==を呼ぼうとしますよ.
indirect_iterator使って

vector<shared_ptr<Foo> >::iterator i
= find_if(make_indirect_iterator(hoge.begin()),
make_indirect_iterator(hoge.end()),
bind(&foo::operator==, _1, foo3) ).base();

とか,lambda使って

vector<shared_ptr<foo> >::iterator i
= find_if(hoge.begin(), hoge.end(), bind(&foo::operator==, *_1, foo3));

とか(このbindはlambdaのbind).というか普通にfindで良いんじゃ・・・.
0962958NGNG
>>959
それだとshared_ptrの==が使われてしまい意図したものではありません。

>>960
おっしゃるとおりでコンパイラは”関数の引数があいまいなためテンプレート引数を減少できません。”といっていました。
Fooのoperator==をFooだけでなくstd::stringでも比較できるようにしていました。
オーバーロードしないようにすればコンパイルできましたが、引数からoperator==を選択してくれないのでしょうか?
bind<・・・>に型を指定してやれば解決するかと思いましたが私にはむりでした。
今はとりあえずforループを回しております。
0963デフォルトの名無しさんNGNG
>>961
ええと、しょうしょう混乱しておりますが。

>それだとshared_ptr<Foo>のoperator==を呼ぼうとしますよ.
というのは>>959さん宛てですかね?
ちがったりして。

ndirect_iteratorは知りませんでした。調べてみます。
0964デフォルトの名無しさんNGNG
>962
オーバーロードされた関数へのポインタを取る場合,
ポインタを取った瞬間にどのオーバーロードへのポインタなのかを
指定してやる必要があります.そのまま汎用関数の引数にすることは出来ません.
典型的にはキャストを使うか

static_cast<bool (Foo::*)(Foo const &) const>(&Foo::operator==)

一旦メンバポインタ変数に代入してから使います.

bool (Foo::*pmf)(Foo const &) const = &Foo::operator==

上のシグネチャはただの例なので実際のoperator==のシグネチャに読み替えて下さい.
・・・っていうか,lambdaが一番楽だと思いますよ.

vector<shared_ptr<foo> >::iterator i
= find_if(hoge.begin(), hoge.end(), *_1 == foo);
0965デフォルトの名無しさんNGNG
>963
おっと,ごめんなさい.961はboost::lambda::bindの話です.忘れてください.

#shared_ptrに対する挙動がboost::bindとboost::lambda::bindで違う・・・.
0966デフォルトの名無しさんNGNG
C++関連のスレが乱立して
閑散としているスレが増えて来ましたので
再編を提案します
http://pc5.2ch.net/test/read.cgi/tech/1101384692/

現状でC++関連は
【C++】template 統合スレ
【C++】STL(Standard Template Library)相談室
BOOSTを語れゴラァ
C++相談室 part37
とありますがこれらは
標準C++相談室【STL含む】
C++テンプレート相談室【Boost/Loki】
の2本に統合でいいように思います

どうでしょうか? 異論がなければ
ここの次スレの名前は標準C++相談室【STL含む】
でいきましょう
0967デフォルトの名無しさんNGNG
>>966
STLとかBoostとか関係なく、
ベストな方法を知りたい、みたいな質問をしたい時はどこ?
0968デフォルトの名無しさんNGNG
>>964
ありごとうございます。
boost以前の問題でしたね。もっと勉強します。
lambdaはうちのコンパイラが使うな(えない)というもので。。。
0969デフォルトの名無しさんNGNG
>>967
そういのはここ(と後継のスレ)でいいのではないでしょうか?
話長くなりそうだったら専門スレに誘導してそこで続けていただくといいと思います
0970デフォルトの名無しさんNGNG
>>966
名前は短い方がいい
余計なものくっつけるな
0971デフォルトの名無しさんNGNG
>>967
ここで聞くと解決するまえにスレ終りそうだから、
新スレ立ててそこで質問しちくり。
0972デフォルトの名無しさんNGNG
>>970
くっつけないと重複スレが立つんだよ。
0973デフォルトの名無しさんNGNG
エキスパートが回答してくれれば
どこに質問したっていいって気分。
0974デフォルトの名無しさんNGNG
>968
>lambdaはうちのコンパイラが使うな(えない)というもので。。。
相手の環境を考慮してなかったです.本当に申し訳ない.
0975デフォルトの名無しさんNGNG
>>966
ISO/IEC14882で定義される範囲は「C++」でしかねえよな
STLだのtemplateだのと断片だけのスレは重複もいいとこ

つーと、残れるのはboostくらいか
0976デフォルトの名無しさんNGNG
次スレ


C++相談室 part38
http://pc5.2ch.net/test/read.cgi/tech/1101473340/l50


0977デフォルトの名無しさんNGNG
あ"ー
0978v(^・^)vNGNG
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
0979v(^・^)vNGNG
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
0980デフォルトの名無しさんNGNG
>>978
#include "stdafx.h"
みたいにプリコンパイル済みヘッダーをインクルードするか、
ファイルの設定でプリコンパイル済みヘッダーを使わないように設定する。
0981デフォルトの名無しさんNGNG
こっちにテンプレ貼ってどうする
0982デフォルトの名無しさんNGNG
ここは人工無能のいるスレでつか?
0983デフォルトの名無しさんNGNG
人工無能ってなに?
0984デフォルトの名無しさんNGNG
スレってなに?
0985デフォルトの名無しさんNGNG
でつかってなに?
0986デフォルトの名無しさんNGNG
ここってなに?
0987デフォルトの名無しさんNGNG
Ruby!!!!!!!!!!!!!!!!!!!!!!
0988デフォルトの名無しさんNGNG
Rubyつかうと一気に○○○が10倍に?!

↑○○○を埋めて。
0989デフォルトの名無しさんNGNG
リスク
0990デフォルトの名無しさんNGNG
さて、お取り込み中の所大変申し訳ありませんが、カウントダウンの時間です。
0991デフォルトの名無しさんNGNG
9
0992デフォルトの名無しさんNGNG
除夜の鐘みたいだ。
0993デフォルトの名無しさんNGNG
>>988
ヘタレ
0994デフォルトの名無しさんNGNG
>>988
そくど
0995デフォルトの名無しさんNGNG
>>988
おなか
0996デフォルトの名無しさんNGNG
>>988
こしけ
0997デフォルトの名無しさんNGNG
>>988
肥満度
099810000000!!!!!!!!!!NGNG
10000000!!!!!!!!!!
0999デフォルトの名無しさんNGNG
1000(σ´Д`)σゲッツ!!
1000一億NGNG
一億
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。