Dans le cas d'une surcharge interne, ta remarque sur la constance de l'opérande de gauche est judicieuse en effet.
Pour ce qui est de la surcharge externe, il ne s'agit pas de prêcher une espèce de vérité comme tu dis, mais juste de proposer un modèle plus cohérent à l'opération +. De plus, si dans le fond, la surcharge interne ou externe ne change pas fondamentalement, en pratique, la surcharge externe des opérateurs symétriques est plus avantageuse.
En effet, avec un opérateur + externe, si un transtypage d'un des deux opérandes doit être réalisé, il peut l'être aussi bien sur l'opérande de gauche que sur l'opérande de droite.
Exemple:
On peut faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class B { /* ... */ }; class A { friend A operator+(const A&, const A&); public: A(const B&); /* ... */ };
Ce qui est moins aisé avec une surcharge interne de l'opérateur +...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4A var1; B var2; A var3 = var2 + var1; // <=> A var3 = var1 + var2;
Partager