基于范围的临时循环

Range based for loop on temporary

考虑

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

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

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

这是未定义的行为。

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

来自 fun().begin()std::vector 将与 fun().end() 返回的 std::vector 完全不同。

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

第二个版本 (B) 可以正常工作

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