c++ - 编译器是否优化了 "for"语句中的第二个条件?

标签 c++ loops for-loop optimization

我希望通过索引遍历一个 vector ,然后我有:

for(size_t i=0;i<v.size();++i)
{...}

我知道用iterator访问比较有效,但我只是想在编译器优化的技术点上讨论。

我的问题是这个“v.size()”是只执行一次还是多次?

或者,编译器将帮助我决定是否需要通过任何优化策略计算大小一次,或者是否需要多次调用——这样我就不必:

size_t s=v.size()
for(size_t i=0;i<s;++i)

让代码更高效一点?

最佳答案

My question is does this "v.size()" execute only once or multiple times?

它被执行多次,每次循环体执行完,检查是否应该再次执行。

如果不多次调用 size(),编译器可能会或可能不会优化代码,这仅取决于编译器。

如果编译器可以保证你没有在循环中修改v,那么是的,编译器完全有可能对其进行优化。如果不能,那么它可能(如果可以,那么编译器是坏的)不会并且不能优化它,因为编译器随后会生成完全不同的代码你写的。

此外,即使编译器没有优化它,您也可能会节省 1 或 2 个 CPU 周期,这实际上没什么。 size()O(1),调用它除了从 vector 中返回一个成员变量外不应做任何其他事情。不要过早优化。

关于c++ - 编译器是否优化了 "for"语句中的第二个条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40945358/

相关文章:

c++ - 在2D vector 中使用第三个[]有什么目的?

c++ - 能够拥有一个包含 const 和非 const 指针的数组

python - 如何减少语句中的条件数量?

java - Hangman Java 游戏打印错误和正确的猜测

python - 跳过python中范围函数中的值

c++ - 在 C++ 中使用 for 循环从用户输入中查找最大和最小整数?

c++ - Microsoft 推荐使用哪种 native API 来渲染 2D 图形?

c++ - 比较 Google Test 或 Google Mock 中的特征矩阵

php - 使用 while 时 PHP 中的 MySql_fetch_array() 错误

c - 在 "for"中使用三元运算符