基于范围的临时循环
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
{
}
考虑
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
{
}