例如,我们有这样的代码:
for (i = 0; i < function(); ++i )
{
// loop body;
}
是否会为每个循环评估 function()?
最佳答案
是的。它将在循环的每次迭代中进行评估。一定是因为函数有可能每次调用都返回不同的值。此外,调用函数可能会产生副作用(例如更改变量的值或写入文件)。编译器不能以其他方式假设。如果该行为不合需要,您可以使用此 for 循环语法仅进行 1 次计算:
for (i = 0, len=function(); i < len; ++i )
{
// loop body;
}
更新:
有些人注意到在某些边缘情况下,编译器可以优化多个调用:例如C++ 中的 const 或内联函数没有副作用,或者可能是 JVM 可以推断该函数是可重复的并且没有副作用。但如果您想要保证,而不是依赖于编译器可能为您做的事情,我仍然推荐上面提到的 for 循环语法。
关于java - C/C++/Java问题: will the expression used in for loop evaluate multiple times?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5561071/