整理一下《Effective C++》的笔记。
尽量用const和enum替换#define(条款2)
如果需要定义类内部的常量,并保证其唯一性,可以定义为:
class GamePlayer{
private:
static const int NumTurns = 5;
int scores[NumTurns];
...
};
而如果编译器不允许内部初始化static成员,就只能在外部用::
初始化,而如果此时我们又要在编译期间用到这个常量,可以用enum
来补偿:
class GamePlayer{
private:
enum { NumTurns = 5 };
int scores[NumTurns];
...
};
另一方面,应该用下面的模板写法代替宏定义:
// 令人窒息的写法
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
// 正确的写法
template<class T>
inline void callWithMax(const T& a, const T& b){
f(a > b ? a : b); // 较大者调用函数f
}