Effective C++学习笔记 条款02:尽量以const,enum,inline替换 #define
2014-10-30 22:50
375 查看
尽量使用const替换 #define定义常量的原因:
#define 不被视为语言的一部分
宏定义的常量,预处理器只是盲目的将宏名称替换为其的常量值,导致目标码中出现多分对应的常量,而const定义的常量,会进入记号表,使用到该常量的地方使用的同一份,使目标码的量更小点;
const可以在类中定义一个class专属常量,其作用域限制于class内。(注:如果一个class专属常量又是static又是整数类型,需要特殊处理。主要不取其地址,则,可以声明并使用但是无须提供定义式。如果,需要取地址,则一定要提供定义式)。优秀的编译器不会为整数型const对象设定另外的存储空间。
如果要取 NumTurns地址,则一定要提供定义式
上面的定义式,应该放在实现文件中,而非头文件。由于class常量已在声明时获得初值,因此定义时不可以再设初值。
无法使用#define创建class的专属常量,因为#define并不重视作用域。
对于类似函数的宏,最好使用inline函数替换 #define:
宏只是原班不动的替换,所以有时候会出现问题。比如:
执行的结果和预想的可能不一致。使用template inline函数就可以提供宏一样的效率,以及一般函数的可预料的行为和类型安全。
#define 不被视为语言的一部分
宏定义的常量,预处理器只是盲目的将宏名称替换为其的常量值,导致目标码中出现多分对应的常量,而const定义的常量,会进入记号表,使用到该常量的地方使用的同一份,使目标码的量更小点;
const可以在类中定义一个class专属常量,其作用域限制于class内。(注:如果一个class专属常量又是static又是整数类型,需要特殊处理。主要不取其地址,则,可以声明并使用但是无须提供定义式。如果,需要取地址,则一定要提供定义式)。优秀的编译器不会为整数型const对象设定另外的存储空间。
class GamePlayer { private: static const int NumTurns = 5; //常量声明式 ,没有取其地址,所以定义式可以省略 int scores[NumTurns]; };
如果要取 NumTurns地址,则一定要提供定义式
const int GamePlayer:: NumTurns; // NumTurns定义式
上面的定义式,应该放在实现文件中,而非头文件。由于class常量已在声明时获得初值,因此定义时不可以再设初值。
无法使用#define创建class的专属常量,因为#define并不重视作用域。
对于类似函数的宏,最好使用inline函数替换 #define:
宏只是原班不动的替换,所以有时候会出现问题。比如:
#define CALL_WITH_MAX(a, b) f( (a) > (b) ? (a) : (b) ) int a = 5, b = 0; CALL_WITH_MAX(++a, b); //a被累加二次 CALL_WITH_MAX(++a, b +10); //a被累加一次
执行的结果和预想的可能不一致。使用template inline函数就可以提供宏一样的效率,以及一般函数的可预料的行为和类型安全。
相关文章推荐
- Effective C++_笔记_条款02_尽量以const、enum、inline替换#define
- 《Effect C++》学习------条款02:尽量以const,enum,inline替换#define
- [Effective C++]条款02:尽量以const,enum,inline 替换#define
- Effective C++ 条款02解读: 尽量以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
- [转]Effective C++ 02 尽量以const, enum, inline替换#define 笔记
- 【Effective C++ 读书笔记】条款02: 尽量以 const, enum, inline 替换 #define
- Effective C++:条款02:尽量以const,enum,inline替换#define
- 《Effective C++》学习笔记条款02 尽量以const,enum,inline替换#define
- Effective C++ 02 尽量以const, enum, inline替换#define 笔记
- Effective C++--条款02:尽量以const,enum,inline替换#define(以编译器替换预处理器)
- Effective C++阅读笔记条款01C++语言联邦,02const,enum,inline替换#define
- Effective C++ -----条款02:尽量以const, enum, inline替换 #define
- [Effective C++]条款02 尽量以const,enum,inline替换#define
- Effective C++ 条款02 尽量以const,enum,inline替换#define
- 条款02:尽量以const、enum、inline替换#define
- [Effective C++读书笔记]002_条款02_尽量以const,enum,inline替换#define
- Effective C++ 条款2 尽量以const,enum,inline替换#define