Читаючи деякі приклади циклів на основі діапазону, вони пропонують два основні способи 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
}
або
for (auto x : vec)
{
// Value of x is copied from an item of vec
// We can not change vec's items by changing x
}
Ну.
Коли нам не потрібні зміни vec
елементів, IMO, Приклади пропонують використовувати другу версію (за значенням). Чому вони не пропонують щось, на що const
посилаються (Принаймні, я не знайшов жодної прямої пропозиції):
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
}
Чи не краще? Хіба це не уникає зайвої копії в кожній ітерації, поки вона є const
?
const auto &x
еквівалентно вашому третьому вибору.