В последнем стандарте C ++ это означает, что:
for (foo : bar)
baz;
эквивалентно:
{
auto && r = bar;
for ( auto it = r.begin(), end = r.end(); it != end; ++it )
{
foo = *it;
baz;
}
}
Когда в приведенном выше баре есть вызов функции, который возвращает коллекцию, например:
vector<string> boo();
е
for (auto bo : boo())
...
Разве строка не становится:
auto&& r = boo();
...
И поэтому временное возвращаемое значение boo () уничтожается в конце инструкции auto && r = boo (), а затем r является зависающей ссылкой на вход цикла ?? Это рассуждение правильно? Если нет, то почему нет?