c++ - 在 C++ 中是否应该始终避免变量声明?

标签 c++ performance readability variable-declaration

有时,为了清楚起见,我会在代码中声明“一次使用”变量。这是否会极大地影响性能或者编译器可以对其进行优化吗?

例如,我倾向于这样做:

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() 可能会在循环的每一步进行计算,这当然不好。 为了清楚起见,我的问题与声明一次性变量这一事实有关。 我在循环后添加了更多代码。我指的是变量 part1part2 等情况。

最佳答案

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/

相关文章:

Swift Final 类和函数

ruby - 如何重构这个 6 行方法以使其更具可读性?

lua - 确定变量是否是 Lua 中的几个值之一

c++ - 在 C++ 中使用带有参数的系统命令

C++ winApi 无法处理子窗口事件

c++ - 0 和 -0 浮点值有什么区别?

c++ - std::unique 是否使 vector 迭代器无效?

sql-server - SQL 进行键查找而不是在索引列上查找

c# - 将文本绘制到png文件上的性能方法?

javascript - 使大数字在 JavaScript 中可读