ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-06-18 00:02:22  阅读:177  来源: 互联网

标签:const 常量 Effective int enum Num define


#define ASPECT_RATIO 1.653
  • ASPECT_RATIO可能从未被编译器看见;也可能在编译器开始处理源码前就被预处理器移走。这也就导致其可能没进入symbol table。

    且对浮点常量而言,预处理器盲目地将宏名称替换,可能导致object code出现多份

  • 解决之道:

    • 利用const替换define
    const double ASPECT_RATIO = 1.653;
    
  • two points:

    • 定义常量指针时,将指针声明成const
      • 常量定义式通常放于头文件
    • class专属常量
      • 为确保此常量至多只有一份实体,必须让它称为static成员
  • define不重视scope,因此无法创建class的常量

class GamePlayer
{
private:
    static const int Num = 5;	//声明式
    int scores[Num];
}
  • 旧编译器也许不允许static成员在声明式获得初值,此时有两种方法可以解决:

    • 将初值放在定义式,也就是实现文件内
    • enum
      • enum类型的数值可被当作ints使用
    class GamePlayer
    {
    private:
        enum { Num = 5 };
        int scores[Num];
    }
    
#define CALL_WITH_MAX(a,b) f((a) > (b) ? (a) : (b))
int a = 5,b = 0;
//此时,a的调用次数取决于被拿来和谁比较
CALL_WITH_MAX( ++a, b );	//a累加两次
CALL_WITH_MAX( ++a, b + 10 );	//a累加一次
  • 以inline替换类似函数的宏

  • 总结:

    • 单纯常量,以const或enums替换#define
    • 类似函数的宏,改用inline替换#define

标签:const,常量,Effective,int,enum,Num,define
来源: https://www.cnblogs.com/chenglixue/p/16387424.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有