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