Tôi đã đọc hiệu quả C++ 3rd Edition được viết bởi Scott Meyers.Tại sao toán tử ++ trả về giá trị không const?
Mục 3 của sách, "Sử dụng const
bất cứ khi nào có thể", cho biết nếu chúng tôi muốn ngăn không cho giá trị không được gán cho giá trị trả về của hàm vô tình, loại trả về phải là const
.
Ví dụ, hàm increment cho iterator
:
const iterator iterator::operator++(int) {
...
}
Sau đó, một số tai nạn được ngăn chặn.
iterator it;
// error in the following, same as primitive pointer
// I wanted to compare iterators
if (it++ = iterator()) {
...
}
Tuy nhiên, vòng lặp như std::vector::iterator
trong GCC không trả lại giá trị const
.
vector<int> v;
v.begin()++ = v.begin(); // pass compiler check
Có một số lý do cho việc này không?
Bạn không nên sử dụng ++ ở bất kỳ bên nào của biểu thức so sánh. –
Tuyệt vời có bao nhiêu câu trả lời sai. –
Bây giờ nó là một thủ thuật cũ, vì nó ngăn cản việc di chuyển-xây dựng. Cách hiện đại để làm điều đó là định nghĩa 'toán tử =' như mặc định bằng cách sử dụng một 'vòng loại'. –