C或C++:for循环变量

Sat*_*evi 10 c c++ for-loop

我的问题非常基本.在C或C++中:

让我们说for循环如下,

for(int i=0; i<someArray[a+b]; i++) {
 ....
 do operations;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否a+b对每个for循环执行计算,或者仅在循环开始时计算一次?

根据我的要求,值a+b是不变的.如果a+b计算并且someArray[a+b]每次在循环中访问该值,我将使用临时变量someArray[a+b]来获得更好的性能.

Ola*_*che 8

您可以在查看生成的代码时找到答案

g++ -S file.cpp
Run Code Online (Sandbox Code Playgroud)

g++ -O2 -S file.cpp
Run Code Online (Sandbox Code Playgroud)

查看输出file.s并比较两个版本.如果someArray[a+b]可以将所有循环周期减少到一个常量值,优化器通常会这样做并将其拉出到临时变量或寄存器中.


Rei*_*ica 5

它的行为就像每次都被计算一样。如果编译器正在优化并且能够证明结果没有改变,则可以将计算移出循环。否则,每次都会重新计算。

如果确定结果是恒定的,并且速度很重要,请使用变量对其进行缓存。