C/C++教程

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

本文主要是介绍Effective c++条款2:尽量用const,enum,inline替换#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
这篇关于Effective c++条款2:尽量用const,enum,inline替换#define的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!