范围基于临时循环

时间:2017-06-02 17:57:08

标签: c++ for-loop visual-studio-2012 iterator

考虑

std::vector<abc> fun() { return a;}
..
..

for( auto itr = fun().begin(); itr< fun().end(); ++itr) //A
 {
  ..
 }
for( auto & itr : fun()) //B
 {
 }

这里的两个循环都不安全吗? (迭代器不兼容?)

1 个答案:

答案 0 :(得分:1)

这是未定义的行为。

for( auto itr = fun().begin(); itr< fun().end(); ++itr) //A
{
    ..
}

std::vector中的fun().begin()std::vector返回的fun().end()完全不同{。}}。

因此,比较itr < fun().end()comparing iterators from two different containers, which is undefined behavior

第二个版本(B)可以正常工作as described in this post

for (auto & itr : fun()) //B
{
}