01:36:56)追加された行はこの色です。削除された行はこの色です。[#b36e8ba5]定数の定義をソースコード上で行う場合、定数の定義と値の定義を同時に行いたい場合があります。通常はこのように書きます。};}}enumの定義と構造体の定義が冗長で、名前の文字列の定義も冗長です。~しかし、魂を悪魔(#define)に売り渡せば、一発で記述できます。[#xa008aee]VC++では、イテレーターの範囲チェックが行われており、安全な反面、若干遅いです。~以下の定義を行うことで、範囲チェックを無効にできます。0ちなみに、以下の設定で範囲チェックが有効になります。[#vd3ad1a2]boost::mplのvectorやmapをfor_eachするサンプル。mapのkeyだけ回すmap_keysのようなフィルタの例も作ってみました。}}}cpp_akiraさんのページにあったサンプルにmapを足してみました。既存の配列をboost::arrayに見せかけるツールを作りました。(無理やりキャストしているだけ)これで、生の配列変数に対して、iteratorとか、size()とか、stl的な機能を使うことができます。[#tc41e4a9]プログラム中に"hoge"のように記載する文字列リテラルは、リンク時に静的な領域にまとめられ、同一の文字列は一つにまとめられます。(ビルドオプションで設定)それを利用して、静的リテラルのアドレスをハッシュ値として扱うことができます。[#e87c5d4b]クラスインスタンスの整数型配列をゼロで初期化するには、初期化リストに記載するだけでよい。[#tc8abb64]多重継承したクラスのポインタは、親クラスのポインタにキャストした場合、アドレスが同一にならない。assertで停止ポインタの値で比較するときは注意が必要。同じ理由で、newの配置構文でクラスインスタンスを確保した場合、親クラスのポインタで削除すると不具合が発生する場合がある。[#jcd6c4c2]if文で値をbooleanとして比較するとき、trueと==で比較すると、思わぬ落とし穴にはまることがある。intとbool値と比較しても、左辺値に対して暗黙の型変換は行われない。比較したときだけ、結果が異なる。};このように仮想関数を部分的にオーバーライドした場合、警告がでる。本来なら同名のオーバーライドを避けるべきである。HOGE(x)などで、別名を無理やり定義されてしまっているのをすり抜ける方法。orderedと通常がある。singleton_pool--サイズ別にシングルトンとして動作する。--シングルトンとして使える。--vectorなどSTLのコンテナのアロケーターとして使える--メモリの解放にはpurge_memoryしかない。};※これでunionから開放されます比較的サイズが小さいクラスを実体のままコンテナに格納する場合、継承したクラスオブジェクトを入れる事が難しい。手っ取り早い方法としては、unionを使う事があるが、unionを使うとコンストラクタが書けないなどのC++11以前の制約がある。maxPeoplesの情報も保持されるポインタを使えば解決するけど、小さいオブジェクトを全部newで作るのは効率が悪い。参照型のインスタンスをもつクラスは、通常だとvector等のコンテナに格納できない。リファレンス型の変数は、リファレンス情報の更新はできない。代入もswapも参照先のデータにたいして行われる。いちおう、言語的には安全。コピーコンストラクタとデストラクタで例外を投げないことが前提。例外が発生すると破綻する。スレッドセーフでもない。シングルスレッド限定。コピーコンストラクタとnewの第二構文を使った初期化を使って実現する。スレッドセーフではない。スレッドセーフにするには排他処理が必要。ここで他のスレッドがthisを参照すると破綻する。コピーコンストラクタとnewの第二構文を使った代入の=を使って実現する。