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

在说明主题前,先描述#define的缺点:
1、#define定义的符号在预处理阶段,会被编译器替换成符号所代表的实际值。不利于程序的追踪。
2、#define没有作用域的概念。
3、#define表达能力有限。如:#define S(x) (x)*(x)。

欲解决问题,我们必须先了解什么情况会出现,为此,我们带着#define的使用展开,其使用可分为两种情况:
其一,如果#define仅仅是简单的符号定义,针对问题1,我们只需引入const修饰符或enum,不过根据#define使用的场合不同,具体的实现也不一样:
(a)当表达为全局常量或namespace常量时,直接用const修饰即可。
(b)当表达为类常量时,整型可定义为static const int…或enum {…}(enum hack),其他可定义为static const …,再在相应类实现里定义此常量。
解决了问题1,问题2也就迎刃而解。
另一种情况,如果#define是函数式定义,这种情况一般是为了节约函数调用开销,针对问题3,我们可以利用inline函数完美解决问题。

因此,尽量以const,enum,inline替换#define。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值