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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条款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函数替换,函数宏会造成奇怪的错误
  尤其是对表达式来说,由于宏是在预处理阶段直接替换掉相关代码,所以会有很多奇怪的问题

以上是关于条款2:尽量以const,enum,inline替换#define的主要内容,如果未能解决你的问题,请参考以下文章

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

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

NO.2 尽量以const,enum,inline 替换 #define

1.尽量以const ,enum,inline替换define

第一篇:尽量多的以 const/enum/inline 替代 #define

effective c++学习笔记