Membaca beberapa contoh loop berdasarkan rentang mereka menyarankan dua cara utama 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
}
atau
for (auto x : vec)
{
// Value of x is copied from an item of vec
// We can not change vec's items by changing x
}
Baik.
Ketika kita tidak perlu mengganti vec
item, IMO, Contoh menyarankan untuk menggunakan versi kedua (berdasarkan nilai). Mengapa mereka tidak menyarankan sesuatu yang const
referensi (Setidaknya saya belum menemukan saran langsung):
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
}
Bukankah ini lebih baik? Bukankah itu menghindari salinan yang berlebihan di setiap iterasi saat itu const
?
const auto &x
itu setara dengan pilihan ketiga Anda.