在最新的C++标准中,它暗示着:
当上述中的bar是一个返回集合的函数调用时,例如:
所以,在语句
for (foo : bar)
baz;
等同于:
{
auto && r = bar;
for ( auto it = r.begin(), end = r.end(); it != end; ++it )
{
foo = *it;
baz;
}
}
当上述中的bar是一个返回集合的函数调用时,例如:
vector<string> boo();
即
for (auto bo : boo())
...
这行不是变成:
auto&& r = boo();
...
所以,在语句
auto&& r = boo()
结束时,boo()
的临时返回值被销毁,然后r成为循环入口处的悬空引用。这个推理正确吗?如果不正确,为什么?
vector<string> boo();
并不是声明一个对象,而是声明一个函数。其次,我不理解你的问题。 - Nawaz