Tôi đang đọc một cuốn sách về C++ và chính xác hơn về quá tải toán tử.C++ tại sao toán tử gán phải trả về một tham số const để tránh (a = b) = c
Ví dụ như sau:
const Array &Array::operator=(const Array &right)
{
// check self-assignment
// if not self- assignment do the copying
return *this; //enables x=y=z
}
Lời giải thích được cung cấp bởi các cuốn sách về trở về ref const thay vì ref là để tránh tập như (x = y) = z. Tôi không hiểu tại sao chúng ta nên tránh điều này. Tôi hiểu rằng x = y được đánh giá đầu tiên trong ví dụ này và vì nó trả về tham chiếu const, phần = z không thể được thực thi. Nhưng tại sao?
Sách nào? Điều đó có vẻ như một sự đề phòng không cần thiết đối với tôi. Tôi không thể tưởng tượng ai đó đang viết '(x = y) = z' - tại sao họ lại? Và không có parens, 'x = y = z' được phân tách thành' x = (y = z) ', điều này có ý nghĩa hoàn hảo, vì vậy không có rủi ro ở đó. –
Nhưng tại sao phải làm gì? Tại sao nó là một ref const? Tại sao nó được thực hiện theo thứ tự này? Tại sao không thể gán 'z' cho (x = y)? – Lazarus
@antronis: nhận được một cuốn sách C++ tốt hơn. – ybungalobill