2008-02-23

Effective C++ 2項

2項 #define より、const、enum、inline を使おう

まあ、これは当たり前ですね
プリプロセッサでいろいろやると見通しが悪いし、特にマクロが問題になりやすいですから

書けば書くほど自分の恥を晒す事になってしまうわけですが、コレも以前ハマりました。
私が定義した列挙型の定義が実は別のところで #define されていたため、当然コンパイルエラーになるわけですが、コンパイルエラーのメッセージが意味不明で何が原因なのかさっぱりわからず…

プリプロセッサではなくコンパイラで行えばスコープを限定する事が出来ますし、コンパイルエラーで訳のわからないメッセージに悩まされる事も減る事でしょう(十分なスキルがあれば悩まないかもしれませんが)

他に知らなかった(けど常識な)事は enumハック
例えばクラスメンバとして static const int Count; を値を宣言し、クラスメンバ int Array[Count];のように配列の宣言の要素数に使用したいとします
この場合、古いコンパイラでは static const を宣言時に初期化できないので配列の要素数には使用できないらしいのです(新しいコンパイラでも宣言時に初期化が出来るのは整数型のみです)
このようなときには static const ではなく enum で定義するとよいとの事

詳細や理由は Effective C++ を参照してください

0 件のコメント: