Spec-Zone.ru › C++

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 - неиспользуемый параметр любого типа, принимающий целочисленную литерал ноль

Возвращаемое значение

1) true если v это equivalent или equal, false если v это less или greater
2) 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 - неиспользуемый параметр любого типа, принимающий целочисленную литерал ноль

Возвращаемое значение

1) true если v это less, и false если v это greater, equivalent, или equal
2) 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 - неиспользуемый параметр любого типа, принимающий целочисленную литерал ноль

Возвращаемое значение

1) true если v это less, equivalent, или equal, и false если v это greater
2) 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 - неиспользуемый параметр любого типа, принимающий целочисленную литерал ноль

Возвращаемое значение

1) true если v это greater, и false если v это less, equivalent, или equal
2) 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 - неиспользуемый параметр любого типа, принимающий аргумент в виде литерала ноль

Значение возврата

1) true если v является greater, equivalent, или equal, и false если v является less
2) 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 - неиспользуемый параметр любого типа, принимающий аргумент в виде литерала ноль

Значение возврата

1) v.
2) greater если v является less, less если v является greater, в противном случае v.

Пример

См. также

weak_ordering
(C++20)
результат 3-х мерного сравнения, поддерживающий все 6 операторов и не подлежащий замене
(класс)
partial_ordering
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API