常见错误2:幻数----读书笔记C++ Gotchas

也就是字面常量。

class Portfolio {

.....

Contract *contracts_[10];

char id_[10];

};

幻数的问题是“没有语义”,谁搞得懂光秃秃的10的含义?

改为

class Portfolio {

enum{maxContrats =10, idlen = 10};

Contract *contracts_[maxContrats];

char id_[idlen];

};

此处枚举常量,不占空间,也没有任何运行期成本。

幻数的另外一个不明显的坏处:其实际类型是平台相关的。以40000为例子,如果int类型尺寸的内存能把它塞下,

它就是int类型的;要是塞不下,就是long类型的。还是老老实实的自己制定类型吧,踏实。

const long patienceLimit = 40000;

幻数的另一个威胁:它们没有地址。

const long *p1 = &40000; //ERROR!!!

const long *p2 = &patienceLimit;//Right

const long &r1 = 40000;//合法,常见错误44会告诉你另一些精彩故事

const long &r2 = patienceLimit;//没问题

请使用枚举变量或初始化了的具名变量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值