什么更有效率?为什么?
选项1:
int n = someFunction();
for (int i = 0; i < n ; i++)
//do something...
Run Code Online (Sandbox Code Playgroud)
选项2:
for (int i = 0; i < (someFunction()); i++)
//do something...
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的回复!
这两个循环甚至不相等:如果someFunction()多次调用它时预计会返回不同的值,结果将会有所不同.
当someFunction()不管你有多少次调用返回的值相同,第一个选项将是更有效时,someFunction()返回大于或等于号1.如果它返回0,将没有区别.
时间上的差异来自第二个选项someFunction()在循环中重复调用以获得限制的事实.即使函数调用非常快,此代码也是次优的
前者总是至少和后者一样有效.对于前者,您只评估someFunction一次.对于后者,您在每次迭代时都会调用它.
智能编译器可能能够someFunction在后一种情况下内联主体,并意识到它可能是一个常量,使其实际上相等,但第一个永远不会慢.
有时我会做这样的事情,从JavaScript借用一个约定:
for(size_t i = 0, l = someFunction(); i < l; i++) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
这与第一个版本实际上是相同的,除了像第二个更简洁一点.