有时,为了清楚起见,我会在代码中声明“一次使用”变量。这是否会极大地影响性能或者编译器可以对其进行优化吗?
例如,我倾向于这样做:
int minVal = long_arithmetic_expresion();
int maxVal = even_longer_expression();
for (int i = minVal; i < maxVal; i++)
{
// Do stuff not related to minVal or maxVal
}
double part1 = 4*sqrt(something)* ... // Very long thing
double part2 = 5*sqrt(something else)* ... // Very long thing
double interestingValue = part1 / part2; // This is the only interesting variable for later
而不是:
for (int i = long_arithmetic_expresion(); i < even_longer_expression(); i++)
{
// Do stuff not related to minVal or maxVal
}
double interestingValue = (4*sqrt(whatever)* ...) / (5*sqrt(something else)* ...);
这个 for 循环将包含在一个将被多次调用的函数中,因此即使很小的性能增益在我的情况下也将是相关的。
注意:
正如很快指出的那样,even_longer_expression() 可能会在循环的每一步进行计算,这当然不好。 为了清楚起见,我的问题与声明一次性变量这一事实有关。 我在循环后添加了更多代码。我指的是变量 part1 和 part2 等情况。
最佳答案
Does this affect dramatically the performance or can the compiler optimize it?
完全取决于:
如果long_arithmetic_expresion()
和even_longer_expresion()
被标记为constexpr
并且在运行时不太可能改变,编译器可以优化重复出现的调用这些函数。
否则,最好使用一次初始化的变量。
关于c++ - 在 C++ 中是否应该始终避免变量声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34636037/