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

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

#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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏尔肖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值