条款2:尽量以const、enum、inline替换#define

1.对于单纯常量,最好以const对象或者enums替换#define;
2.对于形似函数的宏,最好改用inline函数替换#define;


这句话或许可以改为:“宁可以编译器代替预编译器”,因为#define不被视为语言的一部分,例如#define ASPECT_RATIO 1.656 定义了记号名称从未被编译器看见,有可能没进入记号表中,于是当运用此常量并且带来错误时无法定位到该记号名称,你会因为追终他而耗费时间,原因就是:你所用的名称可能未进入记号表中。解决方法就是以const常量替换宏,此外对于浮点数常量可能比#define导致更小的码,因为预编译器会盲目的将 ASPECT_RATIO替换,而出现多份1.656;。
#define无法创建class专属常量,因为#define不重视域,也不能提供封装性,但是const是可以的。
Enum hack的行为某方面比较像#define而不像const,有时候这个正是你想要的,例如取一个const的地址合法,取#define和enum就不合法了,如果你不想让别人获得一个pointer或者reference指向你的常量,那你可以用enum实现这个约束。enum和#define一样绝对不会导致非必要的内存分配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值