目次
コーディングスタイル
プライベートで書くとき用。
リファレンス
C/C++ Reference
ロベールのC++教室
C++入門
ブックマーク
メモリー管理の内側: 動的アロケーションの選択肢とトレードオフ、そして実装http://www-06.ibm.com/jp/developerworks/linux/041217/j_l-memory.html
AspectC++ 規格書
ここから過去ログあさると、ANSI版がよさげINCITS/ISO/IEC 14882-2003ってのがANSI版なのかな? http://www.trickpalace.net/cppll/
ANSI版
ISO版?
JIS
便利ツール
An STL Error Message Decryptor for C++
C++ lint
C++って意外とlintないんだね。以下のようなところをチェックしてくれるやつがほしい
よさげなのあったけど、売り物($200)
高いやつ。$1000。ルールを自分で定義できるらしい
Meyerたんの比較記事。いろいろあるね プリプロセッサ
gccのリファレンス。妙な挙動に悩んだときにいいかも。
よくごっちゃになるけど、#xは引数の文字列化。x ## yは文字列の連結。
2進リテラル
カコイイ。http://d.hatena.ne.jp/Robe/20060721
再帰テンプレート版もどこかで見たけど、
#include <stdio.h> /* 静的アサーション * 静的定数 b が偽だとコンパイルエラーにする。 * b が動的な値の場合もコンパイルエラー。 */ #define SASSERT(b) ((void)(int(*)[(b) ? 1 : -1])0) /* 2進1バイトリテラル * CHAR_BIT に関わらず、8 ビット(16進2桁)まで。 */ #define BYTE2(x) \ (SASSERT(1 <= sizeof(#x)-1 && sizeof(#x)-1 <= 8), \ SASSERT((0x##x & ~0x11111111) == 0), \ (0x##x >> 0) & 0x01 | \ (0x##x >> 3) & 0x02 | \ (0x##x >> 6) & 0x04 | \ (0x##x >> 9) & 0x08 | \ (0x##x >> 12) & 0x10 | \ (0x##x >> 15) & 0x20 | \ (0x##x >> 18) & 0x40 | \ (0x##x >> 21) & 0x80) /* 2進2バイトリテラル */ #define WORD2(x1, x0) \ ((BYTE2(x1) << 8) | BYTE2(x0)) /* 2進4バイトリテラル */ #define DWORD2(x3, x2, x1, x0) \ ((WORD2(x3, x2) << 16) | WORD2(x1, x0)) int main() { printf("%X\n", BYTE2(01011011)); printf("%X\n", WORD2(11001011, 10000011)); printf("%X\n", DWORD2(01011011, 11001011, 10000011, 00000000)); return 0; }
sizeof
char* string = "string"; sizeof(string) == sizeof(char*) sizeof("string") == 7なぜなら"string"は、const char*ではなくconst char[]だから。 つまり、上記2進リテラルマクロのsizeof(#x)-1は、 引数を文字列として見た場合の長さ。面白い。
ついでに、 sizeof(void) == 1 sizeof(void*) は、実装依存らしい。
コンストラクタから例外を投げてはいけない
らしい。
ctor() : hoge_(new Hoge()), super() { }
それって、メンバの宣言順序に気をつければいいだけの話?
ctor() : hoge_(new Hoge()), super(hoge_) { }
…となるとややこしくなりそうな気はするが。
ちなみに、 A* a = new A();でAのコンストラクタが例外を投げたとき、newで確保されたメモリは自動解放されるらしい。 operator newがある場合も、対応するoperator deleteが呼ばれるとか。よくできている。
placement new
趣味ではあまり使うこともないが。
なかなか資料がないが、ここを読めば基本的に解決。
ちなみに#include <new>してある場合、クラスメンバにplacement newを追加しなくても使える。
もっと詳しい話 STLコンテナのかんたん初期化
operator+=とoperator,のオーバーロードらしい。すげぇ vector<int> primes; set_cont( prime ) += 1, 2, 3, 5, 7, 11;
boostにも取り込まれている
C++でプロパティ
クラス内部はともかく、外から見たら綺麗でいいねhttp://www2s.biglobe.ne.jp/~nunokawa/wiki.cgi?page=C%2B%2B%A4%C7%A5%D7%A5%ED%A5%D1%A5%C6%A5%A3
C++0x
200x年のうちに策定完了、らしいhttp://ml.tietew.jp/cppll/cppll/article/12064 http://www.kmonos.net/alang/d/template-comparison.html |