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