Trong C++ 11, tôi có thể lặp qua một số container như vậy:C++ 11 Phạm vi có trụ sở tại vòng hiệu quả "const auto & i" so với "tự động i"
for(auto i : vec){
std::cout << i << std::endl;
}
Nhưng tôi biết rằng này không cần thiết - không cần thiết, kể từ khi tôi chỉ cần in các giá trị của vec
- tạo một bản sao của (EDIT: mỗi phần tử của) vec
, vì vậy thay vào đó tôi có thể làm:
for(auto &i : vec){
std::cout << i << std::endl;
}
Nhưng tôi muốn chắc chắn rằng các giá trị của vec
không bao giờ được sửa đổi và tuân theo const-đúng đắn, vì vậy tôi có thể làm:
for(const auto &i : vec){
std::cout << i << std::endl;
}
Vì vậy, câu hỏi của tôi là: Nếu tôi chỉ cần nhìn tại giá trị của một số thùng chứa, không phải vòng lặp cuối cùng (const auto &i
) luôn được ưu tiên do tăng hiệu quả không có thêm bản sao (EDIT: mỗi phần tử) vec
?
Tôi có một chương trình mà tôi đang phát triển, trong đó tôi đang xem xét thực hiện thay đổi này trong suốt, vì hiệu quả rất quan trọng trong đó (lý do tôi sử dụng C++ ở vị trí nắm tay).
Có, nếu bạn chỉ cần truy cập đọc vào một đối số, nó phải thông qua 'tự động const &' để tránh một bản sao không cần thiết. – 0x499602D2
Từ khóa "const" không làm cho mã của bạn nhanh hơn ... – Tim
'for (auto i: vec)' không tạo thêm một bản sao của toàn bộ 'vec', nó sao chép mỗi _element_ của' vec' vào 'i'. – Casey