簡體   English   中英

什么是“象征常數”和“魔術常數”?

[英]What are “symbolic constants” and “magic constants”?

在Bjarne Stroustrup的C ++之旅中,每章末尾列出了一些建議。 在第一章的最后,其中一個讀到:

避免''魔術常數;''使用符號常數;

什么是魔法和象征常數?

somethingElse = something * 1440;           // a magic constant
somethingElse = something * TWIPS_PER_INCH; // a symbolic one

第一個是魔術常量的一個例子,除了它的值之外,它不傳達任何其他信息。

由於意圖明確,后者更有用。

如果你有多個具有相同值的東西,使用符號常量也會有很大幫助:

static const int TWIPS_PER_INCH = 1440;
static const int SECTORS_PER_FLOPPY = 1440; // showing my age here :-)

這樣,如果其中一個更改,您可以輕松識別代碼中的哪個單個1440必須更改。 由於魔法1440分散在整個代碼中,您必須在多個位置更改它, 找出哪些是緹,哪些是扇區。

一個magic constant將是一個數字值,您只需鍵入一些代碼,而不解釋它為什么存在。 提出一個好榜樣很有挑戰性。 但是我們試試這個:

float areaOfCircle(float radius) {
    return radius * radius * 3.14159
}

在這里,我使用了3.14159的“魔力常數”,沒有任何解釋它來自何處。 這會是更好的風格

const float pi = 3.14159
float areaOfCircle(float radius) {
    return radius * radius * pi;
}

在這里,我給了閱讀代碼的人一些關於常數來自何處以及為什么使用它的想法...它似乎並沒有“神奇地”出現在任何地方。

魔法:

int DeepThought() { return 42; }

符號:

const int TheAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything = 42;
int DeepThought() { return TheAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM