什么是"符号常数"和#34;魔法常数"?

时间:2017-05-13 08:35:37

标签: c++ constants

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

  

避免''魔术常数;''使用符号常量;

什么是魔法和象征常数?

3 个答案:

答案 0 :(得分:12)

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散布在整个代码中,您必须在多个位置更改它找出哪些是缇,哪些是扇区。

答案 1 :(得分:7)

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;
}

在这里,我给了阅读代码的人一些关于常数来自何处以及为什么使用它的想法...它似乎并没有神奇地"无处不在。

答案 2 :(得分:4)

魔术:

int Q() { return 42; }

符号:

const int TheMeaningOfLifeAndEverything = 42;
int Q() { return TheMeaningOfLifeAndEverything; }