std:: compare_three_way
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Old binders and adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Определено в заголовке
<compare>
|
||
|
Определено в заголовке
<functional>
|
||
|
struct
compare_three_way
;
|
(начиная с C++20) | |
Функциональный объект для выполнения сравнений. Выводит типы параметров и возвращаемый тип оператора вызова функции.
Содержание |
Вложенные типы
| Вложенный тип | Определение |
is_transparent
|
unspecified |
Функции-члены
|
operator()
|
получает результат трёхстороннего сравнения обоих аргументов
(public member function) |
std::compare_three_way:: operator()
|
template
<
class
T,
class
U
>
constexpr auto operator ( ) ( T && t, U && u ) const ; |
||
Для выражения std:: forward < T > ( t ) <=> std:: forward < U > ( u ) как expr :
-
Если
expr
приводит к вызову
встроенного
operator
<=>
для сравнения указателей, и задан
составной тип указателя
для
t
и
u
как
P:
-
-
Сравнивает два преобразованных указателя (типа
P) в определенном реализацией строгом полном порядке для указателей :
-
- Если t предшествует u , возвращает std::strong_ordering::less .
- Если u предшествует t , возвращает std::strong_ordering::greater .
- В противном случае возвращает std::strong_ordering::equal .
-
Если последовательность преобразования из
TвPили последовательность преобразования изUвPне является сохраняющей равенство , поведение не определено.
-
Сравнивает два преобразованных указателя (типа
- В противном случае:
-
- Возвращает результат expr .
- Если std:: three_way_comparable_with < T, U > не выполняется, поведение не определено.
Эта перегрузка участвует в разрешении перегрузки только если std:: three_way_comparable_with < T, U > выполняется.
Пример
#include <compare> #include <iostream> struct Rational { int num; int den; // > 0 // Although the comparison X <=> Y will work, a direct call // to std::compare_three_way{}(X, Y) requires the operator== // be defined, to satisfy the 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)); }
Вывод:
greater greater
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3530 | C++20 | syntactic checks were relaxed while comparing pointers | only semantic requirements are relaxed |
Смотрите также
|
(C++20)
|
ограниченный функциональный объект, реализующий
x
==
y
(класс) |
|
(C++20)
|
ограниченный функциональный объект, реализующий
x
!
=
y
(класс) |
|
(C++20)
|
ограниченный функциональный объект, реализующий
x
<
y
(класс) |
|
(C++20)
|
ограниченный функциональный объект, реализующий
x
>
y
(класс) |
|
(C++20)
|
ограниченный функциональный объект, реализующий
x
<=
y
(класс) |
|
(C++20)
|
ограниченный функциональный объект, реализующий
x
>=
y
(класс) |