条款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 <typename T>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依然是必需品。