您的位置:首页 > 其它

条款2:尽量以const、enum、inline替换#define

2016-09-15 19:02 169 查看
1.对于单纯常量,最好以const对象或者enums替换#define;

2.对于形似函数的宏,最好改用inline函数替换#define;

这句话或许可以改为:“宁可以编译器代替预编译器”,因为#define不被视为语言的一部分,例如#define ASPECT_RATIO 1.656 定义了记号名称从未被编译器看见,有可能没进入记号表中,于是当运用此常量并且带来错误时无法定位到该记号名称,你会因为追终他而耗费时间,原因就是:你所用的名称可能未进入记号表中。解决方法就是以const常量替换宏,此外对于浮点数常量可能比#define导致更小的码,因为预编译器会盲目的将 ASPECT_RATIO替换,而出现多份1.656;。

#define无法创建class专属常量,因为#define不重视域,也不能提供封装性,但是const是可以的。

Enum hack的行为某方面比较像#define而不像const,有时候这个正是你想要的,例如取一个const的地址合法,取#define和enum就不合法了,如果你不想让别人获得一个pointer或者reference指向你的常量,那你可以用enum实现这个约束。enum和#define一样绝对不会导致非必要的内存分配。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: