O título é enganoso, portanto, leia a pergunta inteira :-) .
Por "operador de atribuição composta", tenho em mente uma construção como esta op=
, por exemplo +=
. O operador de atribuição pura ( =
) não pertence à minha pergunta.
Por "por que" não quero dizer uma opinião, mas um recurso (livro, artigo, etc.) quando alguns dos designers ou colegas de trabalho etc. expressam seu raciocínio (ou seja, a fonte da escolha do design).
Estou intrigado com a assimetria encontrada em C ++ e C # ( sim, eu sei que C # não é C ++ 2.0 ) - em C ++ você sobrecarregava o operador +=
e depois escrevia quase automaticamente o +
operador apropriado , dependendo do operador definido anteriormente. Em C #, é inverso - você sobrecarrega +
e +=
é sintetizado para você.
Se não me engano, a abordagem posterior mata uma chance de otimização em caso de real +=
, porque um novo objeto deve ser criado. Portanto, deve haver uma grande vantagem dessa abordagem, mas o MSDN é muito tímido para falar sobre isso.
E eu me pergunto qual é essa vantagem - por isso, se você descobriu uma explicação em algum livro em C #, vídeo de conversa sobre tecnologia, entrada de blog, ficarei grato pela referência.
A coisa mais próxima que encontrei é um comentário no blog de Eric Lippert. Por que os operadores sobrecarregados sempre estão estáticos em C #? de Tom Brown. Se a sobrecarga estática foi decidida primeiro, ela simplesmente determina quais operadores podem ser sobrecarregados para estruturas. Isso determina ainda o que pode ser sobrecarregado para as classes.
*=
mutação de um tipo de referência semanticamente incorreta.
+=
primeiro parece absurdo; por que você sobrecarregaria uma operação combinada, e não suas partes?