Đọc một số ví dụ về các vòng dựa trên phạm vi, họ đề xuất hai cách chính 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
}
hoặc là
for (auto x : vec)
{
// Value of x is copied from an item of vec
// We can not change vec's items by changing x
}
Tốt.
Khi chúng tôi không cần thay đổi vec
vật phẩm, IMO, Ví dụ đề xuất sử dụng phiên bản thứ hai (theo giá trị). Tại sao họ không đề xuất một cái gì đó const
tham khảo (Ít nhất là tôi không tìm thấy bất kỳ đề xuất trực tiếp nào):
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
}
Có tốt hơn không? Nó không tránh được một bản sao thừa trong mỗi lần lặp trong khi nó là một const
?
const auto &x
là tương đương với lựa chọn thứ ba của bạn.