Effective c++条款2(尽量以const,enum,inline替换#define)

条款2(Clause 2) :Prefer consts, enums, inlines to #defines
1使用const替换#define
比如:将下面的替换

#define ASPECT_R 1.00


const double AspectR=1.00;

原因:可能记号名称ASPECT_R未进入记号表内,当你运用这个常量的时候,显示的报错信息里面可能不会提到ASPECT_R,只提到了1.00,所以找不到错误在哪里。而使用const就不会出现这种情况。
两种特殊情况
1,定义常量指针(constant pointer)
写两次const
const char* const name="Yap Miracle"; //下面这样更好 const std::string name("Yap Miracle");

2,class专用常量
不用宏定义来实现函数
别用这种函数
#define CALL_WITH_MAX(a, b) F((a) > (b) ? (a): (b))

使用
template inline void callWithMax(const T& a,const T& b) { f(a > b ? a : b); //f为简单比较函数 }

这种写法有很多好处,它遵守作用域和访问规则。
最后请记住
【Effective c++条款2(尽量以const,enum,inline替换#define)】1、对于单纯常量,最好以const对象替换#define。
2、对于形似函数的宏,最好改用inline替换#define。
3、#include和#ifdef,#ifndef仍然是必需品。

    推荐阅读