(1)#define ASPEC_RATIO 1.653
替代为: constdouble AspectRatio = 1.653;
因为define名称ASPEC_RATIO也许从未被编译器看见,那么她就没有进入记号表,那么在获取错误信息的时候,就可能浪费时间去获得1.653的意思。
关于class的专属常量,为了将常量的作用域限制于class内,你必须让它成为一个成员,而为了确保此常量至多只有一根实体,你必须让他成为一个static成员,
classGamePlayer {
private:
static const int NumTurns = 5; //常量声明式
int scores[NumTurns];
…
};
然而你所看到的是NumTurns的声明式,而不是定义式,通常C++要求你对你所使用的任何东西提供一个定义式,但是如果它是一个class专属常量又是static且为整数类型,则需要特殊处理。定义式如下
const intGamePlayer::NumTurns; //NumTurns的定义
请把这个式子放在一个实现文件而不是头文件中,由于class常量已在声明时候获得初期,因此定义的时候不可以在设置初值。
也可以使用枚举类型
classGamplayer {
private:
enum{ NumTurns = 5; };
intscores[NumTurns];
…
};
(2)template<typename T>
inline void CallWithMax(const T&a, constT&b)
{
if(a> b? a : b);
}
(3)对于单纯常量,最好以const对象或enums替换#define
对于类似函数的宏,最哈改用inline函数替换#define