01項 #defineではなく、constとinlineを使おう
C++の復習のために、EffectiveC++を読みます。
一日1項は読みたい
"#defineではなく、constとinlineを使おう"
#defineではなくconstで定数を定義することで、デバッガに情報を表示させられる、変数のスコープを用意に定義できる、というメリットがあります。
Visual C++ 2010では、下の画像のように#defineされた定数の値が表示できません。constなら表示できます。
クラス特有の変数を持たせる場合、#defineでは下のようになります。
class C { #define SIZE 100 char buffer[SIZE]; #undef SIZE };
constを使えば通常の変数と同じようにに書けます。
class C { static const int SIZE = 100; char buffer[SIZE]; };
#defineではなくinlineを使うことで、予期しない動作の実行を防げます。型安全にもなります。
本でも紹介されていた例
#define max(a, b) ((a) > (b) ? (a) : (b)) int a=5, b=0; max(a++, b);
のコードを書くと、aが2回インクリメントされてしまいます。
inline関数やtemplate関数を使えば安全です。
参考書籍
Effective C++ 【改訂第2版】 アスキーアジソンウェスレイシリーズ―Ascii Addison Wesley programming series
- 作者: Scott Meyers,吉川邦夫
- 出版社/メーカー: アスキー
- 発売日: 1998/04
- メディア: 単行本
- 購入: 4人 クリック: 43回
- この商品を含むブログ (77件) を見る