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为简单比较函数
}

这种写法有很多好处,它遵守作用域和访问规则。

最后请记住

1、对于单纯常量,最好以const对象替换#define。
2、对于形似函数的宏,最好改用inline替换#define。
3、#include和#ifdef,#ifndef仍然是必需品。

你可能感兴趣的:(c++)