条款2:尽量以const,enum,inline替换#define

1.#define不被视为语言的一部分,并且使用常量会比#define导致较小的码
 
2.常量替换#define的两种情况
  • 定义常量指针(当指针所指物为常量时,应该有两个const),const char* const A = “zhou”;
  • class中的常量:将常量的作用域限制在类中,因此必须为类中的一个成员,但是常量只能有一份实体,因此需要将它成为一个实体,不能用#define创建一个class专属常量,因为没有封装性
     class GamePlayer{
     private:
        static const int Num = 5;  //常量声明     
        int scores[Num];           //使用该常量
     };
     const int GamePlayer::Num;
     注意1:Num是声明而不是定义,类中的常量定义需要在类外进行:const int GamePlayer::Num(如果类中声明式已经有初值,则定义时不能再有初值,否则则需要初值)
     注意2:当旧编译器不适用上述声明时就赋予初值再定义,当class编译期间需要这个常量值,如下:
     class GamePlayer{
     private:
        static const int Num;      //常量声明    
        int scores[Num];           //使用该常量
     };
 
     const int GamePlayer::Num = 5;
     但是数组需要Num值,可以改变为如下:
     class GamePlayer{
     private:
        enum { Num = 5 };      //常量声明    
        int scores[Num];           //使用该常量
 
     };
 
3.对于形似函数的宏,用inline函数替换,函数宏会造成奇怪的错误
  尤其是对表达式来说,由于宏是在预处理阶段直接替换掉相关代码,所以会有很多奇怪的问题

转载于:https://www.cnblogs.com/CoderZSL/p/7617171.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值