`for(...)`语句中的计算

Gio*_*Gio 0 c++

很多时候我看到的代码如下:

int s = a / x;
for (int i = 0; i < s; i++)
    // do something
Run Code Online (Sandbox Code Playgroud)

如果在for循环中,既没有a也没有x被修改,那么我可以简单地写:

for (int i = 0; i < a / x; i++)
    // do something
Run Code Online (Sandbox Code Playgroud)

然后假设编译器优化a/x,即用常量替换它?

Bil*_*ill 8

最重要的部分int s = a / x是变量名称.它给出了你的语法语义,并让你记住12个月之后你为什么要把一件事分成另一件事.您无法在for语句中命名表达式,因此您将失去自我记录的性质.

const auto monthlyAmount = (int)yearlyAmount / numberOfMonths;
for (auto i = 0; i < monthlyAmount; ++i)
    // do something
Run Code Online (Sandbox Code Playgroud)

通过这种方式,提取变量不是用于编译器优化,而是人工可维护性优化.

  • 很好的建议,但它没有回答这个问题. (4认同)