std::weak_ordering
Определено в заголовочном файле <compare> | ||
class weak_ordering; | (начиная с C++20) | |
Классовый тип std::weak_ordering
является типом результата трёхстороннего сравнения, который:
- Допускает все шесть операторов отношения (
==
,!=
,<
,<=
,>
,>=
)
- Не подразумевает заменяемости: если a эквивалентно b, f(a) может не быть эквивалентно f(b), где f обозначает функцию, которая считывает только существенное для сравнения состояние, доступное через общедоступные константные элементы аргумента. Другими словами, эквивалентные значения могут быть различимы.
- Не допускает несравнимых значений: ровно одно из a < b, a == b или a > b должно быть true.
Содержание |
[править]Константы
Тип std::weak_ordering
имеет три допустимых значения, реализованных как константные статические элементы данных своего типа:
Константа элемент | Определение |
less(inline constexpr) [static] | допустимое значение типа std::weak_ordering , указывающее отношение меньше чем (упорядоченное раньше) (public static константа-элемент) |
equivalent(inline constexpr) [static] | допустимое значение типа std::weak_ordering , указывающее на эквивалентность (не упорядоченное до и не упорядоченное после) (public static константа-элемент) |
greater(inline constexpr) [static] | допустимое значение типа std::weak_ordering , указывающее отношение больше чем (в порядке после) (public static константа-элемент) |
[править]Преобразования
std::weak_ordering
неявно преобразуется в std::partial_ordering, а std::strong_ordering неявно преобразуется в weak_ordering.
operator partial_ordering | неявное преобразование в std::partial_ordering (public функция-элемент) |
std::weak_ordering::operator partial_ordering
constexpr operator partial_ordering()constnoexcept; | ||
Возвращаемое значение
std::partial_ordering::less, если v
равно less
, std::partial_ordering::greater, если v
равно greater
, std::partial_ordering::equivalent, если v
равно equivalent
.
[править]Сравнения
Операторы сравнения определены между значениями этого типа и литералом 0. Это поддерживает выражения a <=> b ==0 или a <=> b <0, которые можно использовать для преобразования результата оператора трёхстороннего сравнения в логические отношения; смотрите std::is_eq, std::is_lt и т.д.
Эти функции не видны обычному неквалифицированному или квалифицированному поиску и могут быть найдены только с помощью зависящего от аргумента поиска, когда std::weak_ordering
является ассоциированным классом аргументом.
Поведение программы, пытающейся сравнить weak_ordering
с чем-либо, кроме целочисленного литерала 0 не определено.
operator==operator<operator>operator<=operator>=operator<=> | сравнивается с нулём или weak_ordering (функция) |
operator==
friendconstexprbool operator==(weak_ordering v, /*не указано*/ u)noexcept; | (1) | |
friendconstexprbool operator==(weak_ordering v, weak_ordering w)noexcept=default; | (2) | |
Параметры
v, w | — | std::weak_ordering значения для проверки |
u | — | неиспользуемый параметр любого типа, который принимает литеральный нулевой аргумент |
Возвращаемое значение
v
равно equivalent
, false, если v
равно less
или greater
operator<
friendconstexprbool operator<(weak_ordering v, /*не указано*/ u)noexcept; | (1) | |
friendconstexprbool operator<(/*не указано*/ u, weak_ordering v)noexcept; | (2) | |
Параметры
v | — | std::weak_ordering значения для проверки |
u | — | неиспользуемый параметр любого типа, который принимает литеральный нулевой аргумент |
Возвращаемое значение
v
равно less
, и false, если v
равно greater
или equivalent
v
равно greater
, и false, если v
равно less
или equivalent
operator<=
friendconstexprbool operator<=(weak_ordering v, /*не указано*/ u)noexcept; | (1) | |
friendconstexprbool operator<=(/*не указано*/ u, weak_ordering v)noexcept; | (2) | |
Параметры
v | — | std::weak_ordering значения для проверки |
u | — | неиспользуемый параметр любого типа, который принимает литеральный нулевой аргумент |
Возвращаемое значение
v
равно less
или equivalent
, и false, если v
равно greater
v
равно greater
или equivalent
, и false, если v
равно less
operator>
friendconstexprbool operator>(weak_ordering v, /*не указано*/ u)noexcept; | (1) | |
friendconstexprbool operator>(/*не указано*/ u, weak_ordering v)noexcept; | (2) | |
Параметры
v | — | std::weak_ordering значения для проверки |
u | — | неиспользуемый параметр любого типа, который принимает литеральный нулевой аргумент |
Возвращаемое значение
v
равно greater
, и false, если v
равно less
или equivalent
v
равно less
, и false, если v
равно greater
или equivalent
operator>=
friendconstexprbool operator>=(weak_ordering v, /*не указано*/ u)noexcept; | (1) | |
friendconstexprbool operator>=(/*не указано*/ u, weak_ordering v)noexcept; | (2) | |
Параметры
v | — | std::weak_ordering значения для проверки |
u | — | неиспользуемый параметр любого типа, который принимает литеральный нулевой аргумент |
Возвращаемое значение
v
равно greater
или equivalent
, и false, если v
равно less
v
равно less
или equivalent
, и false, если v
равно greater
operator<=>
friendconstexpr weak_ordering operator<=>(weak_ordering v, /*не указано*/ u)noexcept; | (1) | |
friendconstexpr weak_ordering operator<=>(/*не указано*/ u, weak_ordering v)noexcept; | (2) | |
Параметры
v | — | std::weak_ordering значения для проверки |
u | — | неиспользуемый параметр любого типа, который принимает литеральный нулевой аргумент |
Возвращаемое значение
greater
, если v
равно less
, less
, если v
равно greater
, иначе v
. [править]Пример
Этот раздел не завершён Причина: нет примера |
[править]Смотрите также
(C++20) | тип результата трёхстороннего сравнения, который поддерживает все 6 операторов и может быть взаимозаменяемым (класс) |
(C++20) | тип результата трёхстороннего сравнения, который поддерживает все 6 операторов, невзаимозаменяемый и допускает несравнимые значения (класс) |