码迷,mamicode.com
首页 > 编程语言 > 详细

Effective C++读书感悟

时间:2015-09-20 13:16:48      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:

条款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, 

Effective C++读书感悟

标签:

原文地址:http://www.cnblogs.com/rosetriger/p/4823189.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!