Il y a des réponses ici sur la différence, mais Herb Sutter dans son papier spécifiquement dit:
<=> est de type maîtres d'œuvre: le code de l'Utilisateur (y compris le code générique) en dehors de la mise en œuvre d'un opérateur<=> devrait presque jamais invoquer un <=> directement (comme déjà découvert comme une bonne pratique dans d'autres langues);
Donc, même si il n'y a pas de différence, du point de l'opérateur est différent: à l'aide de la classe des écrivains de générer des opérateurs de comparaison.
La principale différence entre l'opérateur de soustraction et le "vaisseau spatial" de l'opérateur (en fonction de Sutter proposition) est que la surcharge operator-
vous donne un opérateur de soustraction, alors que la surcharge operator<=>
:
- vous donne les 6 de base des opérateurs de comparaison (même si vous déclarez l'opérateur
default
: aucun code n'est à écrire!);
- déclare si votre classe est comparable, est triable, et si l'ordre est total ou partiel (forts/faibles de Sutter proposition);
- permet hétérogène des comparaisons: vous pouvez la surcharge de comparer votre classe à n'importe quel autre type.
D'autres types de différences dans la valeur de retour: operator<=>
serait de retour d'un enum
d'une classe, la classe spécifie si le type est sortable et si le tri est fort ou faible. La valeur de retour serait de convertir -1, 0 ou 1 (si Sutter laisse de la place pour le type de retour aussi à indiquer la distance, comme strcmp
t). En tout cas, en supposant que le -1, 0, 1 valeur de retour, nous allons obtenir enfin un vrai signum fonction en C++! (signum(x) == x<=>0
)