宏定義
#define ASPECT_RATIO 1.653
主要是宏在預編譯的時候被移除,不加入編譯器編譯,不利于錯誤的檢測,給調試維護帶來一定困難。
因而用
const double ASPECT_RATIO = 1.653;
代替。
存在2個小問題需要注意:
1) 指針常量問題
const char * const authorName = "Scott Meyers";
需要2次使用”const”
2) 在類的定義中
class GamePlayer {
private:
static const int NUM_TURNS = 5; // constant declaration
int scores[NUM_TURNS]; // use of constant

};
此外,還必須在.cpp文件中予以定義:
const int GamePlayer::NUM_TURNS; // mandatory definition;
// goes in class impl. file
值得注意的是老的編譯器不支持這種表達方式,因此要采用如下的方式:
class EngineeringConstants { // this goes in the class
private: // header file
static const double FUDGE_FACTOR;

};
// this goes in the class implementation file
const double EngineeringConstants::FUDGE_FACTOR = 1.35;
這種情形下如果要在類中定義常量數組,需要采用枚舉類型做一折中處理:
class GamePlayer {
private:
enum { NUM_TURNS = 5 }; // "the enum hack" — makes
// NUM_TURNS a symbolic name
// for 5
int scores[NUM_TURNS]; // fine

};
避免
#define max(a,b) ((a) > (b) ? (a) : (b))
這種寫法。
采用內連函數:
inline int max(int a, int b) { return a > b ? a : b; }
增強適應性,應采用模板類:
template<class T>
inline const T& max(const T& a, const T& b)
{ return a > b ? a : b; }
總結:并不是說不使用宏,要明確地知道使用宏后可能會引起的后果,減少有歧義的情況發生。