Leggendo alcuni esempi di loop basati su range, suggeriscono due modi principali 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
}
Bene.
Quando non è necessario modificare gli vec
articoli, IMO, gli esempi suggeriscono di utilizzare la seconda versione (in base al valore). Perché non suggeriscono qualcosa a cui fa const
riferimento (almeno non ho trovato alcun suggerimento diretto):
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
}
Non è meglio? Non evita una copia ridondante in ogni iterazione mentre è un const
?
const auto &x
equivale alla tua terza scelta.