C++

VS2005のauto_ptrというかauto_ptr_refのバグ

以下のauto_ptrを使ったコード、VC6だとエラーになるんだけどVS2005だとコンパイルが通る。が、main()を抜ける時に走る~A()で落ちる。 #include<memory> #include<iostream> using namespace std ; class A { public : A( void ){ cout << "ctor" << endl ; } virtual ~A( void</iostream></memory>…

VS2005のウォッチウィンドウでvectorの要素のアドレスを表示するメモ

std::vector<int> ints ; ints.push_back(5) ; ints.push_back(2) ; VisualStudio2005のウォッチウィンドウvectorの要素の先頭アドレス&ints[0]が知りたいのに以下のような方法だと表示されない。 &ints[0] → CXX0058: エラーです: オーバーロードされた演算子が</int>…

配列の参照渡し

void func( int (&array)[2][2] ) { array[0][1] = 5 ; } main() { int a[2][2] ; func( a ) ; } funcの定義で()をとると、参照の配列は渡せないよとコンパイラに怒られる。()つければOK。このあたりの()のつけ方はいまだに迷うのでメモ。 追記 よくよく考…

C++っぽくCSVから読み込む方法(エラーチェックつき)

『5.6,45,8,9』のようなカンマ区切りの4個の数字を持つCSV形式を想定。 std::string csv_string ; // csvの一行分のデータ double v1 ; int v2,v3,v4 ; // カンマの数をチェック if( std::count( csv_string.begin() , csv_string.end() , ',' ) != 3 ) { r…

typedefの前方宣言

ファイル間の依存関係を少なくするために、ポインタ渡しや参照渡しのパラメタのクラス定義を前方宣言する方法があるんだけど、どうやらtemplateを利用した場合だと出来ないみたい… m.hのコメント部分をはずすとコンパイルエラー(C2371: 'TTT' : 再定義されて…

派生クラスの例外を基底クラスの参照でキャッチできない件について(VC6 SP6)

VC6 SP6において、派生クラスの例外をスローしているのに、基底クラスでキャッチできない現象が発生した。 以下、再現ソース。 class base { protected : virtual ~base(){} // 基底クラスのデストラクタをprotectedにすると、 // 基底クラスで例外をキャッ…