本節書摘來自異步社群出版社《c++覆轍錄》一書中的第1章,第1.2節,作者: 【美】stephen c. dewhurst(史蒂芬 c. 杜赫斯特),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
幻數,用在這裡時其含義是上下文裡出現的裸字面常量(raw numeric literal),本來它們應該是具名常量(named constant)才對:
if( portfolio *p = getportfolio() )
for( int i = 0; i < 10; ++i )
p->contracts_[i] = 0, p->id_[i] = '0';`
現在維護工程師可有事做了。他們不得不在portfolio型别中出現的毫不相關的、但正好值相同的兩個“10”之間費勁地識别出它們各自的意思并分别處理6。當這一切頭疼的事有着極為簡單的解決方案時,我們真的沒有理由不去做:
const long *p1 = &40000; // 錯誤!②
const long *p2 = &patiencelimit; // 沒問題
const long &r1 = 40000; // 合法,不過常見錯誤44會告訴你另一些精彩故事
const long &r2 = patiencelimit; // 沒問題幻數有百害而無一利。<code>`</code>
②譯者注:字面常量無法取址,它們沒有位址。
請使用枚舉常量或初始化了的具名常量。