defineではなく、constとinlineを使おう

compiler-than-preprocessor.png

定数編

なぜconstのほうがいいのか?

#define ASPECT_RATIO 1.6753

このASPECT_RATIOという名前はシンボルテーブルには入らない。
これだと、この数値関連でエラーが出た時1.6753としか表示されないので、
どこから来たものだかわからなくなって困る。
const double ASPECT_RATIO=1.653;

こっちのほうが、デバッグしたときにASPECT_RATIOという名前が出てきてわかりやすい。

文字列定数のとき

はちょっと注意が必要。

const char* AUTHOR_NAME="Miffy Sora";

これだけじゃだめなのである。
これは、ポインタが指す対象をconstしてるだけ。
ポインタそのものもconstにしないとならない。
constなポインタ
const char* const AUTHOR_NAME="Miffy Sora";

クラス内の定数

staticメンバにすること
定数なので、オブジェクトを作る度に同じのが生まれてもしょうがない。
class GamePlayer{
private: static const int NUM_TURNS=5;//定数の宣言
int scores[NUM_TURNS];
};

さて、これだけじゃまだ使うことはできない。
だって、ただの宣言だから。
実装ファイルでstaticなクラスメンバを定義する必要がある。
//.cppにて
const int GamePlayer::NUM_TURNS;//定義

あ、今までcppに数値を書いてたけど、.hにかいてもいいんだ!
これが許されるのは整数だけ。
doubleとかだったらやっぱりこうする
class GamePlayer{
private: static const double FUDGE_FACTOR;//定数の宣言
};
//.cppにて
const int GamePlayer::FUDGE_FACTOR=1.35;//定義

マクロ編

#define max(a,b)((a)>(b)?(a):(b))
template <class T>
inline const T& max(const T& a,const T& b){return a>b?a:b;}
Bibliography

サポートサイト Wikidot.com