Effective C++ 读书笔记——尽量以const,enum,inline替换 #define

#define ASPECT_RATIO 1.653


define 的问题在于:程序在编译前先进行预处理,直接将ASPECT_RATIO替换,在出现错误异常时对预处理的定位会浪费时间。

解决方法:

1.利用常量替换宏,const double AspectRatio = 1.653

在定义常量指针时,需要此形式: const char* const authorName = "xujian"

2.对于类内部的专属常量,可定义为静态成员

</pre>   ..<pre name="code" class="cpp">class GamePlayer{
private:
   static const int NumTurns = 5; //常量声明
   int scores[NumTurns];
}

注意:在.H文件中,用static 关键字进行前缀修饰即可,不可以直接进行初始化,基础变量除外。如果要初始化自定义的类型,则需要在CPP文件中进行初始化

3.在CPP文件进行初始化后编译器无法支持如上代码所示的数组声明式。此时可用枚举代替:

class GamePlayer{

private:

enum { NumTurns = 5}

int scores[NumTurns];

}

枚举类似于宏定义,无法获取地址。

4.对于函数调用

 #define CALL_WITH_MAX(A,B)  f((A) >(B)) ? (A) :(B)

宏定义极为不便,且直接替代会出现问题,可用内联的函数模板代替:

template<typename T>

inline void callWithMax(const T&a,const T&b)

{

    f(a>b ?a:b);

}

结论:可以在适当的场合进行替换,但无法完全取代预定义,#ifdef/#ifndef依然扮演重要的角色。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值