java - C/C++/Java问题: will the expression used in for loop evaluate multiple times?

标签 java c++ c

例如,我们有这样的代码:

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/

相关文章:

java - Android应用程序空指针异常

c++ - 如何从我的 Visual Studio 静态代码分析中排除库 header ?

c - 如何使用单个 OpenGL 上下文渲染到多个窗口?

java - 如何访问我的 android 应用程序中的 Assets 文件夹?

java - 访问从 oracle 过程返回的数组

c++ - `boost::serialization::load_construct_data`的实现引发内存访问冲突错误

C语言yes or no if语句带char?

c - 理解指针算术

java - 处理开启虚拟串口

c++ - 如何从 cppcheck 分析中排除测试路径?