【发布时间】:2012-04-03 20:04:48
【问题描述】:
在https://doc-snapshots.qt.io/qtcreator-extending/coding-style.html 上,建议编写如下 for 循环:
Container::iterator end = large.end();
for (Container::iterator it = large.begin(); it != end; ++it) {
//...;
}
而不是
for (Container::iterator it = large.begin(); it != large.end(); ++it) {
//...;
}
由于我很少在任何代码中看到这种风格,我想知道 end() 的连续调用是否真的为 stl 容器上的大型循环增加了明显的运行时开销,或者编译器是否已经优化了这种情况。
编辑: 正如许多非常优秀的 cmets 所指出的那样:这个问题只有在循环内的代码确实不修改结束迭代器时才有效。否则,end 的重复调用当然是强制性的。
【问题讨论】:
-
顺便说一句:我什至会选择
for (Container::iterator it = large.begin(), end = large.end(); it != end; ++it) { ... },以便将变量end的范围限制为for循环。 -
C# 和 Java 开发人员编写这种循环来让 JITer 对其进行优化(每次迭代少检查一次)。 C++ 似乎不是这样。
-
C++ 开发者只写
for_each(begin(c), end(c), [](){});循环是为库编写者准备的:P -
@MSalter:比方说 C+11 开发人员。 Lambda 与例如提升不适合胆小的人
标签: c++ performance stl containers