标签:
条款2:尽量以const, enum, inline替换#define
1.条款中有这个一句话“ 这个条款或许改为“宁可以编译器替换预处理器”比较好 ”,因为#define在预处理阶段就直接被替换了宏实际定义的具体内容,按着书上定义的宏来举例
#define APSECT_RATIO 1.653
一个程序编译的过程分为: 预处理,编译,汇编,链接 等几个阶段,在编译器开始处理源代码时,APSECT_RATIO就已经被预处理器替换成了实际的1.653,如果编译器编译时获取关于你应用APSECT_RATIO时产生的编译错误信息时,他提示的是1.653,这时你就会困惑,因为APSECT_RATIO并没有被记录在symbol table中,这对追踪问题是极其不便的,所以此条款建议我们用const等来替换#define
2.enum_hack问题,在你的类里定义static常量时,如果你的编译器不支持的“in-class初始设定”,可采用the enum hack的补偿做法
//static const class GamePlayer { static const int numTurns = 5; int scores[numberTurns]; } /** 旧的编译器可能不支持 in-class,这时可以采取如下做法 */ const int GamePlayer::numberTurns; /** 当然也可以采取enum hack的做法 */ class GamePlayer { enum {numberTurns=5}; int scores[numberTurns]; }
3.inline与#define,
标签:
原文地址:http://www.cnblogs.com/rosetriger/p/4823189.html