条款02:尽可能使用const, enum, inline替代define

(1)#define ASPEC_RATIO 1.653

替代为: constdouble AspectRatio = 1.653;

因为define名称ASPEC_RATIO也许从未被编译器看见,那么她就没有进入记号表,那么在获取错误信息的时候,就可能浪费时间去获得1.653的意思。

关于class的专属常量,为了将常量的作用域限制于class内,你必须让它成为一个成员,而为了确保此常量至多只有一根实体,你必须让他成为一个static成员,

classGamePlayer {

private:

         static const int NumTurns = 5;         //常量声明式

         int scores[NumTurns];

         …

};

然而你所看到的是NumTurns的声明式,而不是定义式,通常C++要求你对你所使用的任何东西提供一个定义式,但是如果它是一个class专属常量又是static且为整数类型,则需要特殊处理。定义式如下

const intGamePlayer::NumTurns;  //NumTurns的定义

 请把这个式子放在一个实现文件而不是头文件中,由于class常量已在声明时候获得初期,因此定义的时候不可以在设置初值。

         也可以使用枚举类型

         classGamplayer {

         private:

                   enum{ NumTurns = 5; };

                   intscores[NumTurns];

                   …

         };

 

(2)template<typename T>

          inline void CallWithMax(const T&a, constT&b)

          {

                   if(a> b? a : b);

    }

(3)对于单纯常量,最好以const对象或enums替换#define

          对于类似函数的宏,最哈改用inline函数替换#define

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值