首页 > 编程语言 > 详细

尽量以const,enum,inline替换#define

时间:2020-03-19 21:06:27      阅读:45      评论:0      收藏:0      [点我收藏+]

1、无参宏定义的缺点

  ① 可能会导致编译错误

    记号名称也许从未被编译器看见

    也许编译器在开始处理源码之前,记号名称被预处­理各移走,于是记号名称未进入记号表。

  ② #define 可能会比使用 const 导致更多的码。

  ③ #define 无法创建一个class专属常量,因为#define 并不重视作用域 cope,

    #define 无法定义有封装性的变量,而const可以。

2. const 定义 class 专属常量  

  ① 为了将常量的作用域限制于 class 内,必须让它成为 class 的一个成员(member)   

    为了保证常量只有一份实体,必须让它成为 static成员,

  ② 有一种情况无须为 class静态成员常量提供定义式,

    该常量为整数类型,且不取其地址。

    为了使用一般编译器,强烈建设提供定义式!

1 class GamePlayer {
2 private:
3     static const int NumTurns = 5;    //静态成员常量的声明式
4     ...
5 };
6 
7 const int NumTurns;                   //静态成员常量的定义式

③ 若编译器不让 static 成员在其声明式上获初值,(in-class初值设定)

  你可以将初值放在定义式.

④ 若编译器不让 static 成员在其声明式上获初值,而你想在

  class编译期间需要一个 class 的常量值,

  可使用 "The enum hack",其理论基础为:一个属于枚举

类型约数值可权充 ints 使用, 

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

⑤ 用 enum hack 俩个好处,

  enum hack可以阻止用户获得常量的 pointer 或 reference.

  enum和#define 一样绝不会导致非必要的内存分配,

3、有参宏定义

  有参宏定义可以用template inline代替

 

尽量以const,enum,inline替换#define

原文:https://www.cnblogs.com/swenwen/p/12526909.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!