En el último estándar de C++ que implica que:C++ 11: La declaración de rango para: duración de "inicio de rango"?
for (foo : bar)
baz;
es equivilant a:
{
auto && r = bar;
for (auto it = r.begin(), end = r.end(); it != end; ++it)
{
foo = *it;
baz;
}
}
Cuando la barra de lo anterior es una llamada a una función que devuelve una colección, por ejemplo:
vector<string> boo();
es decir
for (auto bo : boo())
...
la línea no se convierten en:
auto&& r = boo();
...
Y así, el valor de retorno temporal de Boo() es destruido al final de la declaración "auto & & r = Boo()", y luego r es una referencia colgante a la entrada del ciclo. ?? ¿Es este razonamiento correcto? ¿Si no, porque no?
En primer lugar, 'vector boo();' NO declara un objeto. Declara una función. Segundo, no entiendo tu pregunta. –
Nawaz
Sí "vector boo()" es la firma de una función de ejemplo que devuelve una colección. La función se llama en la línea de abajo. –