std:: compare_three_way
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Old binders and adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definido en el encabezado
<compare>
|
||
|
Definido en el encabezado
<functional>
|
||
|
struct
compare_three_way
;
|
(desde C++20) | |
Objeto función para realizar comparaciones. Deducir los tipos de parámetros y el tipo de retorno del operador de llamada a función.
Contenidos |
Tipos anidados
| Tipo anidado | Definición |
is_transparent
|
unspecified |
Funciones miembro
|
operator()
|
obtiene el resultado de la comparación de tres vías en ambos argumentos
(función miembro pública) |
std::compare_three_way:: operator()
|
template
<
class
T,
class
U
>
constexpr auto operator ( ) ( T && t, U && u ) const ; |
||
Dada la expresión std:: forward < T > ( t ) <=> std:: forward < U > ( u ) como expr :
-
Si
expr
resulta en una llamada al
operador incorporado
operator
<=>
que compara punteros, dado el
tipo de puntero compuesto
de
t
y
u
como
P:
-
-
Compara los dos punteros convertidos (de tipo
P) en el orden total estricto definido por la implementación sobre punteros :
-
- Si t precede a u , retorna std::strong_ordering::less .
- Si u precede a t , retorna std::strong_ordering::greater .
- En caso contrario, retorna std::strong_ordering::equal .
-
Si la secuencia de conversión de
TaPo la secuencia de conversión deUaPno es que preserva la igualdad , el comportamiento es indefinido.
-
Compara los dos punteros convertidos (de tipo
- En caso contrario:
-
- Retorna el resultado de expr .
- Si std:: three_way_comparable_with < T, U > no se cumple, el comportamiento es indefinido.
Esta sobrecarga participa en la resolución de sobrecarga solo si se satisface std:: three_way_comparable_with < T, U > .
Ejemplo
#include <compare> #include <iostream> struct Rational { int num; int den; // > 0 // Aunque la comparación X <=> Y funcionará, una llamada directa // a std::compare_three_way{}(X, Y) requiere que se defina el operador== // para satisfacer 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)); }
Salida:
greater greater
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3530 | C++20 | se relajaron las verificaciones sintácticas al comparar punteros | solo se relajan los requisitos semánticos |
Véase también
|
(C++20)
|
objeto función restringido que implementa
x
==
y
(clase) |
|
(C++20)
|
objeto función restringido que implementa
x
!
=
y
(clase) |
|
(C++20)
|
objeto función restringido que implementa
x
<
y
(clase) |
|
(C++20)
|
objeto función restringido que implementa
x
>
y
(clase) |
|
(C++20)
|
objeto función restringido que implementa
x
<=
y
(clase) |
|
(C++20)
|
objeto función restringido que implementa
x
>=
y
(clase) |