阅读 Stack Overflow 上有关 C++ 迭代器和性能**的各种问题后,我开始想知道是否for(auto& elem : container)
被编译器“扩展”成最好的版本? (就像auto
,编译器立即将其推断为正确的类型,因此永远不会更慢,有时甚至更快)。
** 例如,如果你写这样有关系吗?
for(iterator it = container.begin(), eit = container.end(); it != eit; ++it)
or
for(iterator it = container.begin(); it != container.end(); ++it)
对于非失效容器?
标准是您的朋友,请参阅[stmt.范围]/1
对于以下形式的基于范围的 for 语句
for ( for-range-declaration : expression ) statement
让 range-init 等价于括号括起来的表达式
( expression )
以及基于范围的 for 语句的形式
for ( for-range-declaration : braced-init-list ) statement
让 range-init 等同于花括号初始化列表。在每种情况下,基于范围的for
语句相当于
{
auto && __range = range-init;
for ( auto __begin = begin-expr,
__end = end-expr;
__begin != __end;
++__begin )
{
for-range-declaration = *__begin;
statement
}
}
所以,是的,该标准保证实现最佳的形式。
对于许多容器,例如vector
,在此迭代期间修改(插入/删除)它们是未定义的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)