Effiective C++条款第二条 尽量以const,enum,inline,替换#define

来源:互联网 发布:公司seo是什么职位 编辑:程序博客网 时间:2024/06/06 03:17

宁可以编译器替换预处理器。

#define MAX 1.623

MAX 可能从未被编译器看见,编译器在处理之前预处理器就将MAX移走,只能看到1.623, 当运用这个常量并且出现错误时,错误信息就只会提到1.623。用

const double Max = 1.623

就不会出现这种问题。Max肯定会进入符号表。
常量作为类的成员时,将其申明为static将其作用域限制于class中

class Gameplayer{private:    static const int NumTurns = 10;  //声明式    int scores[NumTurns]; };const int Gameplayer::Numturns; //如果编译器需要定义式

常量Numturns的作用域在类中,如果用#define编译后都会替换。除非用#undef。
用enum

class Gameplayer{private:    enum{NumTurns = 5};    int scores[NumTurns]; };

相比较const,enum的作用更像#define. const 定义的常量可以取地址,而enum不可以。虽然好的编译器不会为const设定另外的储存空间,而enum绝对不会。
宏函数

#define MAX(a,b)  f((a)>(n)?(a):(b))

只是做替换(如果不加括号很容易出错)

int a =1, b =2;MAX (++a,b); //a替换后被++两次,实际只是想++一次

用内联函数

template <class T>inline void callMax(const T& num1, const T& num2){  f(a>b?a:b);}
1 0
原创粉丝点击