À QUOI ÇA SERT ?
Historiquement, pour rendre un type comparable, il fallait parfois définir plusieurs opérateurs :
Code: Select all
==
!=
<
<=
>
>=
1. EXEMPLE SIMPLE
Code: Select all
auto result = a <=> b;
- a est inférieur ;
- égal ;
- supérieur ;
- éventuellement non ordonné.
2. POUR UN TYPE PERSONNALISÉ
Code: Select all
struct Version
{
int major;
int minor;
auto operator<=>(const Version&) const = default;
};
Exemple :
Code: Select all
Version a{1, 2};
Version b{1, 5};
if (a < b)
{
}
3. strong_ordering
Pour des valeurs ayant un ordre total propre.
Exemple :
- entiers.
4. partial_ordering
Les flottants peuvent contenir NaN.
NaN n’est ni inférieur, ni égal, ni supérieur de manière normale.
D’où la notion d’ordre partiel.
À RETENIR
Ce mécanisme est utile à reconnaître en C++ moderne, mais il est moins fondamental pour le bas niveau que :
- pointeurs ;
- mémoire ;
- types ;
- références ;
- durée de vie.
