条款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一样绝对不会导致非必要的内存分配。
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一样绝对不会导致非必要的内存分配。
相关文章推荐
- 条款2:尽量以const、enum、inline替换#define
- Effective C++ 条款02 尽量以const,enum,inline替换#define
- 条款2:尽量以CONST,ENUM,INLINE替换#DEFINE
- Effective C++ 条款2 尽量以const,enum,inline替换#define
- Effective C++ -----条款02:尽量以const, enum, inline替换 #define
- 《Effective C++》条款02:尽量以const,enum,inline替换#define
- 条款02:尽量以const,enum,inline替换#define
- [effectiv c++]条款2:尽量以const,enum,inline替换#define(static,const定义式)
- effective C++(第三版)读书笔记一——条款二:尽量以const,enum,inline替换#define
- 条款02:尽量以const,enum,inline替换#define
- 条款02:尽量以const,enum,inline替换#define
- 读书笔记_Effective_C++_条款二:尽量以const, enum, inline替换#define
- 条款2:尽量以const,enum,inline替换#define
- 《Effective C++读书笔记》--条款02尽量以const,enum,inline替换#define
- [Effective C++]条款02:尽量以const,enum,inline 替换#define
- 条款02:尽量以const,enum,inline替换#define(Prefer const,enum,inline to #define)
- 条款2:尽量以const, enum, inline 替换#define
- Effective C++ 读书笔记——条款2:尽量以const,enum,inline替换#define
- 条款02 尽量以const ,enum,inline替换#define
- Effective C++_笔记_条款02_尽量以const、enum、inline替换#define