C++ 迭代器和循环优化

标签 c++ optimization compiler-construction coding-style iterator

我看到很多类似这样的 c++ 代码:

for( const_iterator it = list.begin(),
     const_iterator ite = list.end();
     it != ite; ++it)

相对于更简洁的版本:

for( const_iterator it = list.begin();
     it != list.end(); ++it)

这两种约定的速度会有什么不同吗?因为 list.end() 只被调用一次,所以第一个会稍微快一些。但由于迭代器是 const,编译器似乎会将这个测试拉出循环,为两者生成等效的程序集。

最佳答案

虽然这两个版本不一样。在第二个版本中,它每次都会将迭代器与 list.end() 进行比较,而 list.end() 的评估结果可能会在循环过程中发生变化。现在当然不能通过 const_iterator it 来修改 list;但没有什么能阻止循环内的代码直接调用 list 上的方法并对其进行变异,这可能(取决于 list 是哪种数据结构)改变结束迭代器。因此,在某些情况下,预先存储结束迭代器可能是不正确的,因为当您访问它时,它可能不再是正确的结束迭代器。

关于C++ 迭代器和循环优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/795987/

相关文章:

C++ - 字符串流 << "overwriting"

c++ - 使用 C++11 将数组设置为零

c++ - clang-linux : reporting CFI errors without crashing. ftrap-函数和-O2

performance - 编程语言的速度是否取决于编译器?

C++ : Difference between linking library and adding include directories

c++ - C++ 中的编译时接口(interface)实现检查

c++ - 分配 vector 的前缀和并将结果存储在静态 vector 中

optimization - 在 javac 中禁用优化?

python - 如何在for循环中迭代不同的值?

java - 创建 Java 扩展的最佳工具是什么?