Название вводит в заблуждение, поэтому, пожалуйста, прочитайте весь вопрос :-) .
Под «составного оператора присваивания» Я имею в виду конструкцию , как это op=
, например +=
. Оператор чистого присваивания ( =
) не относится к моему вопросу.
Под «почему» я имею в виду не мнение, а ресурс (книгу, статью и т. Д.), Когда некоторые из дизайнеров или их коллеги и т. Д. Выражают свои соображения (т. Е. Источник выбора дизайна).
Я озадачен асимметрией, обнаруженной в C ++ и C # ( да, я знаю, что C # - это не C ++ 2.0 ) - в C ++ вы перегружаете оператор, +=
а затем почти автоматически пишете соответствующий +
оператор, полагаясь на ранее определенный оператор. В C # все наоборот - вы перегружены +
и +=
синтезированы для вас.
Если я не ошибаюсь, более поздний подход убивает шанс для оптимизации в случае фактического +=
, потому что новый объект должен быть создан. Так что у такого подхода должно быть какое-то большое преимущество, но MSDN слишком стесняется об этом рассказывать.
И мне интересно, что это за преимущество - так что, если вы заметили объяснение в какой-то книге на C #, видео о технических выступлениях, записи в блоге, я буду благодарен за ссылку.
Самое близкое, что я нашел, - это комментарий в блоге Эрика Липперта. Почему перегруженные операторы всегда статичны в C #? Том Браун Если сначала была решена статическая перегрузка, она просто указывает, какие операторы могут быть перегружены для структур. Это далее диктует, что может быть перегружено для классов.
*=
что изменение типа ссылки семантически неверно.
+=
сначала кажется абсурдной; почему вы перегружаете комбинированную операцию, а не ее части?