码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-10-01 15:12:17      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:处理   代码   stat   layer   限制   static   问题   错误   lin   

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函数替换,函数宏会造成奇怪的错误
  尤其是对表达式来说,由于宏是在预处理阶段直接替换掉相关代码,所以会有很多奇怪的问题

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

标签:处理   代码   stat   layer   限制   static   问题   错误   lin   

原文地址:http://www.cnblogs.com/CoderZSL/p/7617171.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!