Effective C++ 不要滥用宏

1.用宏的坏处

#define PI 3.14

用宏定义PI  所有遇到PPI的都替换为3.14 若是发生错误 这就是3.14 看不到这个PPI

用const 代替 如 const double Pi = 3.14;  

2.const替换宏

宏是不可修改的 const char * Text = "hello";  这只代表 "hello"不可改变 可以Text = “1111”;

所以一般为 const char * const Text = "hello"; 

3.类中const静态成员

class GamePlayer {

private:

  static const int NumTurns = 5;      // constant declaration

  int scores[NumTurns];               // use of constant
  ...
};

  static const int NumTurns = 5;这是特殊的例子 没有定义可以直接用

如果 compilers禁止这种关于  静态整型族类属常的初始化的使用方法

class GamePlayer {

private:

  enum { NumTurns = 5 };             // "the enum hack" - makes
                                     // NumTurns a symbolic name for 5

  int scores[NumTurns];              // fine
  ...
};

4.宏函数

#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
int f(int a){
        return a;
    }

int a = 5, b = 0;

CALL_WITH_MAX(++a, b); // a is incremented twice

CALL_WITH_MAX(++a, b+10); // a is incremented once

第一次会调用两次++a 而第二次只调用了一次 

template<typename T>                               // because we don't

inline void callWithMax(const T& a, const T& b)    // know what T is, we

{                                                  // pass by reference-to-

  f(a > b ? a : b);                                // const - see Item 20

}
  • 对于 simple constants(简单常量),用 const objects(const 对象)或 enums(枚举)取代 #defines。

  • 对于 function-like macros(类似函数的宏),用 inline functions(内联函数)取代 #defines。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值