Le titre est trompeur, alors lisez toute la question :-) .
Par «opérateur d'affectation composé», j'ai en tête une construction comme celle-ci op=
, par exemple +=
. L'opérateur d'affectation pure ( =
) ne fait pas partie de ma question.
Par «pourquoi», je ne veux pas dire une opinion, mais une ressource (livre, article, etc.) lorsque certains des designers, ou leurs collègues, etc. expriment leur raisonnement (c'est-à-dire la source du choix de conception).
Je suis intrigué par l'asymétrie trouvée en C ++ et C # ( oui, je sais que C # n'est pas C ++ 2.0 ) - en C ++, vous surchargeriez l'opérateur +=
, puis écririez presque automatiquement l' +
opérateur approprié en vous appuyant sur l'opérateur précédemment défini. En C #, c'est l'inverse - vous surchargez +
et +=
est synthétisé pour vous.
Si je ne me trompe pas, l'approche ultérieure tue une chance d'optimisation en cas de réel +=
, car un nouvel objet doit être créé. Il doit donc y avoir un gros avantage d'une telle approche, mais MSDN est trop timide pour en parler.
Et je me demande quel est cet avantage - donc si vous avez repéré une explication dans un livre en C #, une vidéo tech-talk, une entrée de blog, je serai reconnaissant pour la référence.
La chose la plus proche que j'ai trouvée est un commentaire sur le blog d'Eric Lippert Pourquoi les opérateurs surchargés sont-ils toujours statiques en C #? par Tom Brown. Si la surcharge statique a été décidée en premier, elle dicte simplement quels opérateurs peuvent être surchargés pour les structures. Cela dicte davantage ce qui peut être surchargé pour les classes.
*=
mutation d'un type de référence est sémantiquement incorrecte.
+=
semble d'abord absurde; pourquoi voudriez-vous surcharger une opération combinée plutôt que ses parties?