循环条件下常数的评估

Lea*_*ess 2 c++ optimization loops as-if

for(int i = 0; i < my_function(MY_CONSTANT); ++i){
    //code using i
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,将my_function(MY_CONSTANT)在每次迭代时进行评估,还是会自动存储?这取决于使用的优化标志吗?

Che*_*Alf 10

它必须每次调用函数一样工作.

但是,如果编译器每次都能证明函数结果是相同的,那么它可以在"as"规则下进行优化.

例如,这通常发生在调用.end()标准容器时.


一般建议:如果对是否微观优化一段代码有疑问,

  1. 不要这样做.
  2. 如果您仍在考虑这样做,请进行衡量.
  3. 好吧还有第三点,但我忘记了,也许是,仍然等待.

换句话说,根据代码的清晰程度决定是否使用变量,而不是基于想象的性能.