C++ 基于范围的临时循环

C++ 基于范围的临时循环,c++,for-loop,visual-studio-2012,iterator,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 { } std::vector fun(){return a;} .. .. for(auto-itr=fun().begin();itr

考虑

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

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

这里的两个回路都不安全吗?(迭代器不兼容?

这是未定义的行为

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

第二个版本无法工作。对
fun()
的两个调用都返回不同的
std::vector
。您无法比较不同容器中的迭代器。您编写的范围是使用vs的扩展名,它应该是const reference(我阅读了这个问题,因为您知道第一个变量是错误的。)@DanielSchepler它是100%安全的。你应该重新阅读参考资料:@NathanOliver哦,对了,我把它和case
boost::optional f();混淆了。。。对于(自动c:*(f()){…}
这是不安全的,因为
boost::optional::operator*()&&&
返回一个
t&&
,但是
f()
临时的则不会延长生存期。很抱歉给你带来了困惑。
for (auto & itr : fun()) //B
{
}