宏定義
#define ASPECT_RATIO 1.653
主要是宏在預(yù)編譯的時候被移除,不加入編譯器編譯,不利于錯誤的檢測,給調(diào)試維護(hù)帶來一定困難。
因而用
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
值得注意的是老的編譯器不支持這種表達(dá)方式,因此要采用如下的方式:
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;
這種情形下如果要在類中定義常量數(shù)組,需要采用枚舉類型做一折中處理:
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))
這種寫法。
采用內(nèi)連函數(shù):
inline int max(int a, int b) { return a > b ? a : b; }
增強(qiáng)適應(yīng)性,應(yīng)采用模板類:
template<class T>
inline const T& max(const T& a, const T& b)
{ return a > b ? a : b; }
總結(jié):并不是說不使用宏,要明確地知道使用宏后可能會引起的后果,減少有歧義的情況發(fā)生。