繁体   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