我有一个像这样的示例代码,其中文字dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)) {
() -> Void in
// catch notifications here
}
重复几次。
1
我应该定义一个常量foo(x - 1);
y = z + 1;
bar[1] = y;
,并用它替换文字吗?
ONE
这种替换是否会提高性能和/或减少机器代码大小,有利于降低代码可读性?文字的重复次数会改变答案吗?
答案 0 :(得分:3)
它不会为您带来任何性能/内存改进。但是,您应该尝试将代码保持在magical numbers之外。因此,如果您的代码在多个位置存在重复常量,并且在所有这些位置,此常量与逻辑角度相同 ,则最好将其设为命名常量。 / p>
示例:
const int numberOfParticles = 10; //This is just an example, it's better not to use global variables.
void processParticlesPair(int i, int j) {
for (int iteration = 0; iteration < 10; ++iteration) {
//note, that I didn't replace "10" in the line above, because it is not a numberOrParticles,
//but a number of iterations, so it is a different constant from a logical point of view.
//Do stuff
}
}
void displayParticles() {
for (int i = 0; i < numberOfParticles; ++i) {
for (int j = 0; j < numberOfParticles; ++j) {
if (i != j) {
processParticlesPair(i, j);
}
}
}
}
答案 1 :(得分:1)
取决于。如果您的代码中只有1
,并且您询问是否应该替换它们:不要。保持代码清洁。您将没有任何性能或内存优势 - 更糟糕的是,您可能会增加构建时间
但是,如果1
是构建时参数:是的,请引入常量!但请选择比ONE
更好的名称!
答案 2 :(得分:0)
不,绝对没有。如果您的名称指示数字的含义(例如我应该定义一个常量
ONE
,并用它替换文字吗?
NumberOfDummyFoos
),如果其值可以更改并且您想要防止必须在十几个位置更新它,那么您可以为此使用常量,但常量ONE
绝对不会增加文字1
的值。
这种替换是否可以提高性能和/或减少机器代码大小,有利于降低代码可读性?
在任何实际的实现中,它都没有。
答案 3 :(得分:0)
用命名常量替换文字只有意义,
如果常数的含义是特殊的。用1
替换ONE
是
在大多数情况下只是开销,并没有添加任何有用的信息
对读者而言,特别是如果它用于不同的功能(索引,计算的一部分等)。如果数组的条目1以某种方式特殊,则使用常量THE_SPECIAL_INDEX=1
是有意义的。
对于编译器,它通常没有任何区别。
答案 4 :(得分:0)
在汇编中,一个常量值通常占用与其他值相同的内存量。在源代码中设置常量值对于人类来说比优化更方便。
在这种情况下,以这种方式使用ONE既不是性能增强也不是可读性增强。这就是为什么你以前可能从未在源代码中看到过它;)