2009-11-10 80 views
1

显然,使用命名常量魔术数字的目的是为了代码清晰,并且不需要遍历整个代码更改数字。魔术数字不需要命名常量的情况

但是,如果您只有一个数字在函数中使用过一次,您会做什么?假设你有一个短成员函数,它使用一个对象的速度(我们会说它不会改变)来计算它的运动,但这是使用该速度的唯一函数。你...

A)类提供一个名为静态常量使用

B)将一个命名常量在功能

C)使用一个神奇的数字,但它发表评论

D)其他...

我是倾向于使用一个神奇的数字,并评论它,如果数字只用于一次,但我想听听别人的想法。

编辑:是否将一个名为常量的函数调用多次并赋值给函数会有性能影响?如果是这样我想最好的办法是把固定在一个命名空间或使它成为一个类变量,等等

回答

5

只需将其向上:

void do_something(void) 
{ 
    const float InitialVelocity = 5.0f; 

    something = InitialVelocity; 
    // etc. 
} 
+0

这是否有任何性能问题,如果你是在高性能环境? – Anonymous 2009-11-10 02:18:46

+1

不,除非你的编译器完全死机。 MSVC和GCC(带有-O3)会将该数字视为编译时常量。 – Crashworks 2009-11-10 02:20:27

+0

谢谢崩溃。很有帮助。 – Anonymous 2009-11-10 02:21:16

3

假设你有一个短部件功能 使用对象的速度

你说,不断有一个名字:

const type object_velocity = ....; 

魔法数字是我的敌人:)

1

我会使用一个函数局部命名常量,至少。通常,我会使用一个名为常量的匿名命名空间来使整个源文件中的值可用,假定它稍后可能对其他函数有用。

0

使用月蚀重构函数将常量移动到方法的命名变量中。

0

使用它作为一个常数函数内部:

const int x = myMagicNumber; //Now document the magic.