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