Beim Lesen einiger Beispiele für bereichsbasierte Schleifen schlagen sie zwei Hauptmethoden vor: 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
}
oder
for (auto x : vec)
{
// Value of x is copied from an item of vec
// We can not change vec's items by changing x
}
Gut.
Wenn wir keine vec
Elemente ändern müssen, empfehlen IMO, Beispiele, die zweite Version (nach Wert) zu verwenden. Warum sie nicht etwas vorschlagen, auf das const
verwiesen wird (Zumindest habe ich keinen direkten Vorschlag gefunden):
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
}
Ist es nicht besser Vermeidet es nicht eine redundante Kopie in jeder Iteration, während es eine ist const
?
const auto &x
dies Ihrer dritten Wahl entspricht.