Читая некоторые примеры циклов, основанных на диапазонах, они предлагают два основных способа: 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 items by changing x
}
или
for (auto x : vec)
{
// Value of x is copied from an item of vec
// We can not change vec 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 items by changing x
}
Разве это не лучше? Не избегает ли избыточная копия на каждой итерации, пока она const
?