Opérateurs surchargés en soi ne sont que du sucre syntaxique pour les appels de fonctions le compilateur lui-même n'est pas autorisé à faire des suppositions sur les propriétés qui peuvent ou non exister pour de tels appels. Les optimisations qui exploitent les propriétés d'un opérateur spécifique (par exemple, les propriétés de De Morgan pour les opérateurs booléens, la commutativité pour les sommes, la distributivité pour la somme/le produit, la transformation de la division intégrale en une multiplication appropriée, ...) ne peuvent être employées que lorsque les "opérateurs réels" sont utilisés.
Remarquez plutôt que certaines parties du bibliothèque standard peut associer une signification sémantique spécifique aux opérateurs surchargés - par exemple, std::sort
s'attend par défaut à un operator<
qui respecte un ordre faible et strict entre les éléments - mais cela est bien sûr indiqué dans les conditions préalables de chaque algorithme/conteneur.
(incidemment, la surcharge &&
y ||
devraient probablement être évités de toute façon car ils perdent leurs propriétés de court-circuitage lorsqu'ils sont surchargés, leur comportement devient alors surprenant et donc potentiellement dangereux)