也就是字面常量。
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;//没问题
请使用枚举变量或初始化了的具名变量。