2017-10-02から1日間の記事一覧
例外が最後までキャッチされないときに呼ばれる関数terminate terminate関数が呼ばれるとプログラムは異常終了する。 正確にはterminate関数はabort関数を呼び出して異常終了する。 exit関数は呼ばれないのでデストラクタも呼ばれない、正常な終了処理が行わ…
メモリ上にある値を使って計算を行うにはメモリからCPUへデータが読み込まれる。 CPUにもメモリとは別にデータを置いておく場所があり、この作業領域をレジスタという。レジスタは非常に高速なアクセス。CPUとレジスタの話? メモリからレジスタはそれなり。…
C言語で作られたライブラリをC++で使う場合には注意が必要。 CとC++では関数名の内部表現が違う。 内部表現はコンパイラ後の名前みたいなものか。 これがCとC++で違うってことはコンパイル後にお互いがわからなくなるのか。 これを解決するのがextern "言語…
通常の配列へのポインタはそのまま行ける。 二次元配列からは普通じゃいけない。 int array[3][5]; int* p = array; これはエラーになる。 int array[3]; int* p = array; ふつうの配列でこうやるけど、配列名はそのまま先頭要素のアドレスなので、 int arra…
マクロ引数に # をつけると文字列リテラルとして展開される。 #define TEST(n) cout << n << endl; int main() { TEST(i == 0); system("pause"); } これだとエラーになる。 #define TEST(n) cout << #n << endl; int main() { TEST(i == 0); system("pause"…
トークンはコード内で分割できない最小単位だったはず。 それを連結する・・? なんだろう。 まず、 TYPEDEF_CONTAINERS(int, int); こう書くと typedef vector<int> VectorInt; typedef list<int> ListInt; typedef set<int> SetInt; こう展開されるマクロを作りたいとする</int></int></int>…
第三引数?でいいのかな。を , で区切って行えるのはなぜ? for (int i = 0; i < size; ++i, ++j) { という話らしい。 これはfor文の機能ではない。 コンマ演算子というものの働き。 式1,式2 と書けば式1から順に処理される。 これ全体で1つの式だという…
構造体の話。 ん、わかりにくいな。 構造体でファイルのサイズとパス名を保存しておく場合に、 struct Fileinfo { int sizeFile;//ファイルサイズ char path[MAX_PATH];//パス名 }; こうすればいいけど、パス名を常に最大まで使うわけじゃない。 ほとんどが…