如果繁重的计算函数在循环的条件部分中,运行时是否存在差异?

shi*_*zou 4 c++ performance runtime

如果在循环的条件部分中进行大量计算,运行时是否存在差异?

例如:

int i,n;
for(i=1;i<=[call to some complex function on n];i++)
...
Run Code Online (Sandbox Code Playgroud)

要么

int i,n,foo;
foo=[call to some complex function on n];
for(i=1;i<=foo;i++)
...
Run Code Online (Sandbox Code Playgroud)

哪一个更有效率?循环是进行一次计算还是每次迭代?

Tho*_*ews 6

是的,除非函数是const并且编译器可以将其降低到常量值,否则for循环的条件部分中提供的函数将会出现"性能损失".编译器需要为每次迭代调用该函数.

我强烈建议在进入循环之前将函数的结果放入一个常量临时变量中.

例:

const unsigned int limit = my_vector.size();
for (unsigned int i = 0; i < limit; ++i)
{
  // iterate over vector
}
Run Code Online (Sandbox Code Playgroud)