В последнем стандарте С++ это означает, что:
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 является ссылкой на запись в записи цикла.?? Правильно ли это рассуждение? Если нет, почему бы и нет?