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, указывающее отношение меньше (упорядочено перед) (публичная статическая константа-член) |
| equivalent(inline constexpr)
[static] | допустимое значение типа std::strong_ordering, указывающее эквивалентность (ни упорядочено перед, ни упорядочено после), то же, что и equal (публичная статическая константа-член) |
| equal(inline constexpr)
[static] | допустимое значение типа std::strong_ordering , указывающее эквивалентность (ни упорядочено перед, ни упорядочено после), то же, что и equivalent (публичная статическая константа-член) |
| greater(inline constexpr)
[static] | допустимое значение типа std::strong_ordering, указывающее отношение больше (упорядочено после) (публичная статическая константа-член) |
Преобразования
std::strong_ordering является самым сильным из трёх категорий сравнения: из него нельзя неявно преобразовать в любую другую категорию, но можно неявно преобразовать в две другие.
| operator partial_ordering | неявное преобразование в std::partial_ordering (публичный член-функция) |
std::strong_ordering::operator partial_ordering
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.
| operator weak_ordering | неявное преобразование в std::weak_ordering (публичный член-функция) |
std::strong_ordering::operator weak_ordering
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, не определено.
| operator==operator<operator>operator<=operator>=operator<=> | сравнивает с нулём или strong_ordering (функция) |
operator==
friend constexpr bool operator==( strong_ordering v, /* unspecified */ 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 или greater
true если оба параметра содержат одинаковое значение, false в противном случае. Обратите внимание, что equal эквивалентно equivalent.operator<
friend constexpr bool operator<( strong_ordering v, /* unspecified */ u ) noexcept; | (1) | |
friend constexpr bool operator<( /* unspecified */ u, strong_ordering v ) noexcept; | (2) |
Параметры
| v | - | значение std::strong_ordering для проверки |
| u | - | неиспользуемый параметр любого типа, принимающий целочисленную литерал ноль |
Возвращаемое значение
true если v это less, и false если v это greater, equivalent, или equal
true если v это greater, и false если v это less, equivalent, или equal operator<=
friend constexpr bool operator<=( strong_ordering v, /* unspecified */ u ) noexcept; | (1) | |
friend constexpr bool operator<=( /* unspecified */ u, strong_ordering v ) noexcept; | (2) |
Параметры
| v | - | значение std::strong_ordering для проверки |
| u | - | неиспользуемый параметр любого типа, принимающий целочисленную литерал ноль |
Возвращаемое значение
true если v это less, equivalent, или equal, и false если v это greater
true если v это greater, equivalent, или equal, и false если v это less operator>
friend constexpr bool operator>( strong_ordering v, /* unspecified */ u ) noexcept; | (1) | |
friend constexpr bool operator>( /* unspecified */ u, strong_ordering v ) noexcept; | (2) |
Параметры
| v | - | значение std::strong_ordering для проверки |
| u | - | неиспользуемый параметр любого типа, принимающий целочисленную литерал ноль |
Возвращаемое значение
true если v это greater, и false если v это less, equivalent, или equal
true если v это less, и false если v это greater, equivalent, или equal operator>=
friend constexpr bool operator>=( strong_ordering v, /* unspecified */ u ) noexcept; | (1) | |
friend constexpr bool operator>=( /* unspecified */ u, strong_ordering v ) noexcept; | (2) |
Параметры
| v | - | значение типа std::strong_ordering, подлежащее проверке |
| u | - | неиспользуемый параметр любого типа, принимающий аргумент в виде литерала ноль |
Значение возврата
true если v является greater, equivalent, или equal, и false если v является less
true если v является less, equivalent, или equal, и false если v является greater operator<=>
friend constexpr strong_ordering operator<=>( strong_ordering v, /* unspecified */ u ) noexcept; | (1) | |
friend constexpr strong_ordering operator<=>( /* unspecified */ u, strong_ordering v ) noexcept; | (2) |
Параметры
| v | - | значение типа std::strong_ordering, подлежащее проверке |
| u | - | неиспользуемый параметр любого типа, принимающий аргумент в виде литерала ноль |
Значение возврата
v.greater если v является less, less если v является greater, в противном случае v. Пример
См. также
|
(C++20) | результат 3-х мерного сравнения, поддерживающий все 6 операторов и не подлежащий замене (класс) |
|
(C++20) | результат 3-х мерного сравнения, поддерживающий все 6 операторов, не подлежащий замене и допускающий несравнимые значения (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/compare/strong_ordering