El título es engañoso, así que lea la pregunta completa :-) .
Por "operador de asignación compuesto" tengo en mente una construcción como esta op=
, por ejemplo +=
. El operador de asignación puro ( =
) no pertenece a mi pregunta.
Por "por qué" no me refiero a una opinión, sino a un recurso (libro, artículo, etc.) cuando algunos de los diseñadores, o sus compañeros de trabajo, etc. expresan su razonamiento (es decir, la fuente de la elección del diseño).
Estoy desconcertado por la asimetría que se encuentra en C ++ y C # ( sí, sé que C # no es C ++ 2.0 ): en C ++ sobrecargaría el operador +=
y luego escribiría casi automáticamente el +
operador apropiado basándose en el operador previamente definido. En C # es al revés: se sobrecarga +
y +=
se sintetiza para usted.
Si no me equivoco, el enfoque posterior mata la posibilidad de optimización en caso de que sea real +=
, porque se debe crear un nuevo objeto. Por lo tanto, tiene que haber una gran ventaja de este enfoque, pero MSDN es demasiado tímido para contarlo.
Y me pregunto cuál es esa ventaja, por lo que si vio una explicación en un libro de C #, un video de charla técnica, una entrada de blog, le agradeceré la referencia.
Lo más parecido que encontré es un comentario en el blog de Eric Lippert ¿Por qué los operadores sobrecargados siempre están estáticos en C #? por Tom Brown. Si la sobrecarga estática se decidió primero, simplemente dicta qué operadores se pueden sobrecargar para las estructuras. Esto dicta aún más qué se puede sobrecargar para las clases.
*=
mutar un tipo de referencia es semánticamente incorrecto.
+=
primero parece absurda; ¿Por qué sobrecargaría una operación combinada en lugar de las partes de ella?