C++ 笔记(一) —— 尽量以 const、enum、inline 替换 #define
2016-12-29 20:36
405 查看
1 #define ASPECT_RATIO 1.653记号 ASPECT_RATIO 不会进入 symbol table,因为它在预处理阶段就被替换了。如果运用此常量时获得了一个编译错误,并且该宏定义又非自己所写,就会对 1.653 为何意、来自何处而感到困惑。于是,我们会因为追踪代码而浪费时间。应以常量取而代之:
1 const double kAspectRatio = 1.653;这样没准还会减小 object code 的体积,因为预处理器“盲目”的进行宏替换,可能会导致多份 1.653。如果要定义一个常量的 char * 字符串,则:
1 const char * const kAuthorName = “Scott Meyers”;两个 const,一个约束字符串内容不可变,一个约束字符串指针不可变。或者这样:
1 const std::string kAuthorName(“Scott Meyers”);另外,宏没有作用域的限制,也不能提供任何封装性,但 const 常量可以。
1 class GamePlayer {2 private:3 static const int kNumTurns = 5;4 int scores[kNumTurns];5 }然后在定义文件中:
1 const int GamePlayer::kNumTurns;如果不是在数组声明中用到了 kNumTurns,其初值的设定也可以放到定义中。如果编译器不支持 in-class 初值设定,也可用所谓的 “the enum hack” 手法:
1 class GamePlayer {2 private:3 enum { kNumTurns = 5 };4 int scores[kNumTurns];5 }也许对于此种应用,enum hack 的方式更好。enum hack 的行为更相像于 #define,因为对于一个 enum 值,同样不能取其地址。#define 的另一个常见用处是定义一个“伪函数”,而调用它不会招致 function call 带来的额外开销。
1 #define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))定义这种宏要十分小心,每个实参都要加上小括号,但仍应对不了下述情况:
1 CALL_WITH_MAX(++a, b); //a可能会被累加两次这种情况下,可以 template inline 函数代之:
1 template<typename T>2 inline void CallWithMax(const T &a, const T &b) {3 f(a > b ? a : b);4 }最后,#define 也许只需用于防止头文件的重复 include。学习资料: 《Effective C++》转载自: http://www.cnblogs.com/ilocker/p/4720655.html
相关文章推荐
- C++ 笔记(一) —— 尽量以 const、enum、inline 替换 #define
- [转]Effective C++ 02 尽量以const, enum, inline替换#define 笔记
- [C++]尽量以const,enum,inline替换#define
- Effective C++ 02 尽量以const, enum, inline替换#define 笔记
- 读书笔记_Effective_C++_条款二:尽量以const, enum, inline替换#define
- Effective C++学习笔记 条款02:尽量以const,enum,inline替换 #define
- 【C++】尽量以const,enum,inline 替换 #define
- Effective C++ Item 2 尽量以const, enum, inline 替换 #define
- Effective c++ 笔记二—尽量以const ,enum,inline替换#define
- 改善C++ 程序的150个建议学习之建议25:尽量用const、enum、inline替换#define
- <Effective C++>条款02:尽量以const,enum,inline替换#define
- Effective C++ 笔记(2):尽量以const,enum,inline替换#define
- effective C++笔记:item02 尽量以const,enum,inline替换#define
- Effective C++_笔记_条款02_尽量以const、enum、inline替换#define
- effetive C++ 02 尽量以const,enum,inline替换#define
- c++ 尽量不要使用#define 而是用const、enum、inline替换。
- Effective C++阅读笔记_条款2:尽量以const,enum,inline替换#define
- Effective C++ Item 02-尽量以const、enum、inline替换#define
- [effectiv c++]条款2:尽量以const,enum,inline替换#define(static,const定义式)
- 条款2:尽量以const,enum,inline替换#define