Назва вводить в оману, тому прочитайте все питання :-) .
op=
Наприклад, "оператор присвоєння складових" я маю на увазі таку конструкцію, як ця +=
. Чистий оператор призначення ( =
) не належить до мого питання.
Під "чому" я маю на увазі не думку, а ресурс (книга, стаття тощо), коли хтось із дизайнерів або їх колег тощо висловлює свої міркування (тобто джерело вибору дизайну).
Мене спантеличує асиметрія, знайдена у C ++ та C # ( так, я знаю, що C # не є C ++ 2.0 ) - у C ++ ви перевантажуєте оператора, +=
а потім майже автоматично записуєте відповідного +
оператора, спираючись на раніше визначений оператор. У C # це навпаки - ти перевантажуєшся +
і +=
синтезується для тебе.
Якщо я не помиляюсь, більш пізній підхід вбиває шанс на оптимізацію у випадку фактичного +=
, оскільки новий об’єкт повинен бути створений. Тож має бути якась велика перевага такого підходу, але MSDN занадто сором’язливо, щоб про це говорити.
І мені цікаво, у чому полягає ця перевага - тому, якщо ви помітили пояснення в якійсь книжці на C #, відео в технічному спілкуванні, записі в блозі, я буду вдячний за довідку.
Найближче, що я знайшов, - це коментар до блогу Еріка Ліпперта Чому перевантажені оператори завжди статичні в C #? Том Браун. Якщо статичне перевантаження було вирішено спочатку, воно просто диктує, які оператори можуть бути перевантажені для структур. Це далі диктує, що можна перевантажувати для занять.
*=
мутація еталонного типу є семантично неправильною.
+=
передусім здається абсурдним; чому б ви перевантажували комбіновану операцію, а не її частини?