std::weak_order
| Определён в заголовке <compare>
|
||
inline namespace /* unspecified */ {
inline constexpr /* unspecified */ weak_order = /* unspecified */;
}
|
(начиная с C++20) | |
| Сигнатура вызова |
||
template< class T, class U >
requires /* see below */
constexpr std::weak_ordering weak_order(T&& t, U&& u) noexcept(/* see below */);
|
||
Сравнивает два значения с помощью трёхстороннего сравнения и возвращает результат типа std::weak_ordering.
Пусть t и u будут выражениями, а T и U обозначают decltype((t)) и decltype((u)) соответственно, тогда std::weak_order(t, u) является эквивалентным выражению:
- Если
std::is_same_v<std::decay_t<T>, std::decay_t<U>>являетсяtrue:std::weak_ordering(weak_order(t, u)), если это корректное выражение с разрешением перегрузки, выполняемым в контексте, который не содержит объявленияstd::weak_order,- в противном случае, если
Tявляется типом с плавающей запятой:- если
std::numeric_limits<T>::is_iec559соответствуетtrue, выполняет слабое упорядочивающее сравнение значений с плавающей запятой (см. ниже) и возвращает этот результат как значение типаstd::weak_ordering, - в противном случае, даёт значение типа
std::weak_ordering, которое согласовано с упорядочиванием, наблюдаемым операторами сравненияT,
- если
- в противном случае,
std::weak_ordering(std::compare_three_way()(t, u)), если это корректно, - в противном случае,
std::weak_ordering(std::strong_order(t, u)), если это корректно.
- Во всех остальных случаях выражение является некорректным, что может привести к ошибке подстановки, когда оно появляется в непосредственном контексте инстанцирования шаблона.
Объекты точек кастомизации
Имя
std::weak_order
обозначает
объект точки кастомизации
, который является константным
функциональным объектом
литерального
типа
semiregular
класса. Для подробностей см.
CustomizationPointObject
.
Строгий слабый порядок IEEE типов с плавающей точкой
Пусть x и y будут значениями одного типа с плавающей точкой IEEE, а weak_order_less ( x, y ) будет логическим результатом, указывающим, предшествует ли x y в строгом слабом порядке, определённом стандартом C++.
- Если ни x , ни y не являются NaN, тогда weak_order_less ( x, y ) == true тогда и только тогда, когда x < y , т.е. все представления равных значений с плавающей точкой эквивалентны;
- Если x является отрицательным NaN и y не является отрицательным NaN, тогда weak_order_less ( x, y ) == true ;
- Если x не является положительным NaN и y является положительным NaN, тогда weak_order_less ( x, y ) == true ;
- Если и x , и y являются NaN с одинаковым знаком, тогда ( weak_order_less ( x, y ) || weak_order_less ( y, x ) ) == false , т.е. все NaN с одинаковым знаком эквивалентны.
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
|
(C++20)
|
тип результата трёхстороннего сравнения, который поддерживает все 6 операторов и не является заменяемым
(класс) |
|
(C++20)
|
выполняет трёхстороннее сравнение и производит результат типа
std::strong_ordering
(объект точки настройки) |
|
(C++20)
|
выполняет трёхстороннее сравнение и производит результат типа
std::partial_ordering
(объект точки настройки) |
|
(C++20)
|
выполняет трёхстороннее сравнение и производит результат типа
std::weak_ordering
, даже если
operator
<=>
недоступен
(объект точки настройки) |