使用 for 循环时什么更有效?

What is more efficient when using a for loop?

在许多使用数组的 for 循环中,我看到 i < arr.length() 作为第二条语句
会这样吗:
for(i = 0; i < arr.length(); i++){
//do something
}
效率比这低:
size = arr.length();
for(i = 0; i < size; i++){
//do something
}?
还是差异很小我不应该在意?
这个问题只适用于需要使用函数来找到 array/list 长度的语言,不像 java,例如,它是面向对象的,数组有一个长度属性 arr.length

第一个版本在语言、编译器、其配置和循环条件方面可能较慢。

事实上,例如在 C、C++ 和 Java 中,每次迭代都会调用该函数,因此当禁用优化时,生成的程序可能会变慢。其他语言,例如 Python,有一种不同类型的循环,它遍历给定的可迭代对象/范围(例如列表、生成器)并且对值进行一次评估。 在您的情况下,如果启用优化,则不应看到性能差异,因为函数调用 arr.length() 通常是一个常量(在循环执行的上下文中)并且 大多数编译器足以检测到这一点并生成一个快速等效代码(您可以在 C++ here 中看到一个简单示例)。但是,请注意解释器通常不会执行此类优化。