Al leer algunos ejemplos de bucles basados en rango, sugieren dos formas principales 1 , 2 , 3 , 4
std::vector<MyClass> vec;
for (auto &x : vec)
{
// x is a reference to an item of vec
// We can change vec's items by changing x
}
o
for (auto x : vec)
{
// Value of x is copied from an item of vec
// We can not change vec's items by changing x
}
Bien.
Cuando no necesitamos cambiar vec
elementos, OMI, los ejemplos sugieren usar una segunda versión (por valor). Por qué no sugieren algo que const
haga referencia (al menos no he encontrado ninguna sugerencia directa):
for (auto const &x : vec) // <-- see const keyword
{
// x is a reference to an const item of vec
// We can not change vec's items by changing x
}
¿No es mejor? ¿No evita una copia redundante en cada iteración mientras es un const
?
const auto &x
es equivalente a su tercera opción.