[Effective C++, 学习总结] 02 尽量以const, enum, inline替换#define

#define ASPECT_RATIO            1.653
// 替换
const double AspectRatio = 1.653

若要在头文件内定义一个常量,如下示例:

const char * const authorName = "Scott Meyers";

 class专属常量

1 class GamePlayer {
2 private:
3    static const int NumTurns = 5;
4    int scores[NumTurns];
5    ...   
6 };

另外一种方式

1 class GamePlayer {
2 private:
3 enum { NumTurns = 5 };
4 
5 int scores[NumTurns];
6 
7 ...
8 };
// 如果你不想让别人获得一个pointer或referenct指向你的某个整数常量,enum可以帮助你实现这个约束。

宏函数

 1 // 以a和b的较大值调用f
 2 #define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
 3 
 4 int a = 0, b = 0;
 5 CALL_WITH_MAX(++a, b); // a被累加两次
 6 CALL_WITH_MAX(++a, b+10); // a被累加一次
 7 
 8 template<typename T>
 9 inline void CallWithMax(const T& a, const T& b)
10 {
11   f(a > b ? a : b)  
12 }

忠告:

对于单纯常量,最好以const对象或enums替换#defines.

对于形似函数的宏(macros),最好改用inline函数替换#defines.

 

转载于:https://www.cnblogs.com/AiLun/p/11498091.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值