std:: compare_three_way
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Old binders and adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Défini dans l'en-tête
<compare>
|
||
|
Défini dans l'en-tête
<functional>
|
||
|
struct
compare_three_way
;
|
(depuis C++20) | |
Objet fonction pour effectuer des comparaisons. Déduit les types de paramètres et le type de retour de l'opérateur d'appel de fonction.
Table des matières |
Types imbriqués
| Type imbriqué | Définition |
is_transparent
|
unspecified |
Fonctions membres
|
operator()
|
obtient le résultat de la comparaison à trois voies sur les deux arguments
(fonction membre publique) |
std::compare_three_way:: operator()
|
template
<
class
T,
class
U
>
constexpr auto operator ( ) ( T && t, U && u ) const ; |
||
Étant donné l'expression std:: forward < T > ( t ) <=> std:: forward < U > ( u ) comme expr :
-
Si
expr
résulte en un appel à l'
opérateur intégré
operator
<=>
comparant des pointeurs, étant donné le
type de pointeur composite
de
t
et
u
comme
P:
-
-
Compare les deux pointeurs convertis (de type
P) dans l'ordre total strict défini par l'implémentation sur les pointeurs :
-
- Si t précède u , retourne std::strong_ordering::less .
- Si u précède t , retourne std::strong_ordering::greater .
- Sinon, retourne std::strong_ordering::equal .
-
Si la séquence de conversion de
TversPou la séquence de conversion deUversPn'est pas préservatrice d'égalité , le comportement est indéfini.
-
Compare les deux pointeurs convertis (de type
- Sinon :
-
- Retourne le résultat de expr .
- Si std:: three_way_comparable_with < T, U > n'est pas satisfait, le comportement est indéfini.
Cette surcharge participe à la résolution de surcharge seulement si std:: three_way_comparable_with < T, U > est satisfait.
Exemple
#include <compare> #include <iostream> struct Rational { int num; int den; // > 0 // Bien que la comparaison X <=> Y fonctionnera, un appel direct // à std::compare_three_way{}(X, Y) nécessite que l'opérateur== // soit défini, pour satisfaire std::three_way_comparable_with. constexpr bool operator==(Rational const&) const = default; }; constexpr std::weak_ordering operator<=>(Rational lhs, Rational rhs) { return lhs.num * rhs.den <=> rhs.num * lhs.den; } void print(std::weak_ordering value) { value < 0 ? std::cout << "less\n" : value > 0 ? std::cout << "greater\n" : std::cout << "equal\n"; } int main() { Rational a{6, 5}; Rational b{8, 7}; print(a <=> b); print(std::compare_three_way{}(a, b)); }
Sortie :
greater greater
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement correct |
|---|---|---|---|
| LWG 3530 | C++20 | les vérifications syntaxiques ont été assouplies lors de la comparaison de pointeurs | seules les exigences sémantiques sont assouplies |
Voir aussi
|
(C++20)
|
objet fonction contraint implémentant
x
==
y
(classe) |
|
(C++20)
|
objet fonction contraint implémentant
x
!
=
y
(classe) |
|
(C++20)
|
objet fonction contraint implémentant
x
<
y
(classe) |
|
(C++20)
|
objet fonction contraint implémentant
x
>
y
(classe) |
|
(C++20)
|
objet fonction contraint implémentant
x
<=
y
(classe) |
|
(C++20)
|
objet fonction contraint implémentant
x
>=
y
(classe) |