Tiêu đề là sai lệch, vì vậy xin vui lòng đọc toàn bộ câu hỏi :-) .
op=
Ví dụ, bằng "toán tử gán gán", tôi có một cấu trúc như thế này +=
. Toán tử gán thuần túy ( =
) không thuộc về câu hỏi của tôi.
Bởi "tại sao" tôi không có nghĩa là một ý kiến, nhưng tài nguyên (sách, bài viết, v.v.) khi một số nhà thiết kế, hoặc đồng nghiệp của họ, v.v. bày tỏ lý lẽ của họ (tức là nguồn gốc của sự lựa chọn thiết kế).
Tôi bối rối bởi sự bất đối xứng được tìm thấy trong C ++ và C # ( vâng, tôi biết C # không phải là C ++ 2.0 ) - trong C ++, bạn sẽ quá tải toán tử +=
và sau đó gần như tự động viết +
toán tử thích hợp dựa vào toán tử được xác định trước đó. Trong C # thì ngược lại - bạn quá tải +
và +=
được tổng hợp cho bạn.
Nếu tôi không nhầm, cách tiếp cận sau này sẽ giết chết cơ hội tối ưu hóa trong trường hợp thực tế +=
, bởi vì đối tượng mới phải được tạo. Vì vậy, phải có một số lợi thế lớn của cách tiếp cận như vậy, nhưng MSDN quá ngại để nói về nó.
Và tôi tự hỏi lợi thế đó là gì - vì vậy nếu bạn phát hiện ra lời giải thích trong một số cuốn sách C #, video nói về công nghệ, mục blog, tôi sẽ biết ơn sự tham khảo.
Điều gần nhất tôi tìm thấy là một bình luận trên blog Eric Lippert Tại sao các toán tử quá tải luôn tĩnh trong C #? bởi Tom Brown. Nếu quá tải tĩnh được quyết định trước tiên, nó chỉ đơn giản chỉ ra các toán tử nào có thể bị quá tải cho các cấu trúc. Điều này tiếp tục chỉ ra những gì có thể bị quá tải cho các lớp.
*=
đổi một loại tham chiếu là không chính xác về mặt ngữ nghĩa.
+=
đầu tiên có vẻ vô lý; Tại sao bạn lại quá tải một hoạt động kết hợp chứ không phải là các bộ phận của nó?