条款一:尽量使用const、inline而不是#define
2014-08-04 14:05
309 查看
#define ASPECT_RATIO 1.653
编译器会永远也看不到ASPECT_RATIO这个符号名,因为在源码进入编译器之前,它会被预处理程序去掉,于是ASPECT_RATIO不会加入到符号列表中。如果涉及到这个常量的代码在编译时报错,就会很令人费解,因为报错信息指的是1.653,而不是ASPECT_RATIO。
解决这个问题的方案很简单:不用预处理宏,定义一个常量:
const double ASPECT_RATIO = 1.653;
另一个普遍的#define指令的用法是用它来实现那些看起来象函数而又不会导致函数调用的宏。典型的例子是计算两个对象的最大值:
#define max(a,b) ((a) > (b) ? (a) : (b))
int a = 5, b = 0; max(++a, b);// a 的值增加了2次 max(++a, b+10); // a 的值只增加了1次
你可以用普通函数实现宏的效率,再加上可预计的行为和类型安全,这就是内联函数:
template<class T> inline const T& max(const T& a, const T& b) { return a > b ? a : b; }
--------------------------------------------------------------------------------------------------------------
预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理,预处理指令是以#号开头的代码行。
相关文章推荐
- 条款二 尽量使用const,enum,inline替换#define
- 尽量使用const、enum、inline,避免使用#define
- 转帖 尽量使用const、enum、inline,避免使用#define
- Effective C++:条款1:尽量用const和inline而不用#define
- effective C++(第三版)读书笔记一——条款二:尽量以const,enum,inline替换#define
- 条款02:尽量以const, enum, inline替换#define(Prefer consts,enums, and inlines to #defines)
- Effective C++(一)尽量使用const和inline来替代#define
- 读书笔记_Effective_C++_条款二:尽量以const, enum, inline替换#define
- [Effective C++读书笔记]002_条款02_尽量以const,enum,inline替换#define
- 条款02:尽量以const,enum,inline代替#define
- 从C转向C++:条款1:尽量用const和inline而不用#define
- 《Effective C++》条款02:尽量以const,enum,inline替换#define
- Effective C++学习笔记:条款1:尽量用const和inline而不用#define
- Effective C++ 条款1:尽量用const和inline而不用#define
- Effective C++ 条款1: 尽量用const和inline而不用#define (连载)
- effective C++ 条款 1:尽量用const和inline而不用#define
- 条款2:尽量以const,enum,inline替换#define
- 条款1:尽量用const和inline而不用#define
- c++ 尽量不要使用#define 而是用const、enum、inline替换。
- 条款02:尽量以const,enum,inline替换#define(Prefer const,enum,inline to #define)