很多时候我看到的代码如下:
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,即用常量替换它?
最重要的部分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)
通过这种方式,提取变量不是用于编译器优化,而是人工可维护性优化.