std:: totally_ordered, std:: totally_ordered_with
|
定义于头文件
<concepts>
|
||
|
template
<
class
T
>
concept totally_ordered
=
|
(1) | (C++20 起) |
|
template
<
class
T,
class
U
>
concept totally_ordered_with
=
|
(2) | (C++20 起) |
|
辅助概念
|
||
|
template
<
class
T,
class
U
>
concept __PartiallyOrderedWith
=
|
(3) | ( 仅用于说明* ) |
std::totally_ordered_with
规定:当对(可能混合的)
T
和
U
操作数使用比较运算符
==,!=,<,>,<=,>=
时,其结果与严格全序保持一致。混合操作数的比较结果应等价于将操作数转换为其公共类型后的比较结果。
__PartiallyOrderedWith
规定:类型
T
的值与类型
U
的值可通过
<
、
>
、
<=
和
>=
运算符在偏序关系中进行相互比较(以任意顺序),且比较结果具有一致性。
目录 |
语义要求
这些概念仅在它们被满足且所有它们所包含的概念都被建模时才会被建模。
a
、
b
和
c
:
- bool ( a < b ) 、 bool ( a > b ) 和 bool ( a == b ) 中有且仅有一个为 true ;
- 若 bool ( a < b ) 和 bool ( b < c ) 均为 true ,则 bool ( a < c ) 为 true ;
- bool ( a > b ) == bool ( b < a )
- bool ( a >= b ) == ! bool ( a < b )
- bool ( a <= b ) == ! bool ( b < a )
-
给定
t和t2,分别表示类型为 const std:: remove_reference_t < T > 和 std:: remove_reference_t < T > 的不同但相等的对象的左值,以及 -
给定
u和u2,分别表示类型为 const std:: remove_reference_t < U > 和 std:: remove_reference_t < U > 的不同但相等的对象的左值,
令
C
为
std::
common_reference_t
<
const
std::
remove_reference_t
<
T
>
&
,
const
std::
remove_reference_t
<
U
>
&
>
,且给定表达式
E
和类型
C
,令
CONVERT_TO
<
C
>
(
E
)
为:
|
(C++23 前) |
|
(C++23 起) |
以下表达式均为 true:
- bool ( t < u ) == bool ( CONVERT_TO < C > ( t2 ) < CONVERT_TO < C > ( u2 ) )
- bool ( t > u ) == bool ( CONVERT_TO < C > ( t2 ) > CONVERT_TO < C > ( u2 ) )
- bool ( t <= u ) == bool ( CONVERT_TO < C > ( t2 ) <= CONVERT_TO < C > ( u2 ) )
- bool ( t >= u ) == bool ( CONVERT_TO < C > ( t2 ) >= CONVERT_TO < C > ( u2 ) )
- bool ( u < t ) == bool ( CONVERT_TO < C > ( u2 ) < CONVERT_TO < C > ( t2 ) )
- bool ( u > t ) == bool ( CONVERT_TO < C > ( u2 ) > CONVERT_TO < C > ( t2 ) )
- bool ( u <= t ) == bool ( CONVERT_TO < C > ( u2 ) <= CONVERT_TO < C > ( t2 ) )
- bool ( u >= t ) == bool ( CONVERT_TO < C > ( u2 ) >= CONVERT_TO < C > ( t2 ) )
-
对于类型为
const
std::
remove_reference_t
<
T
>
的任何左值
t,以及 -
类型为
const
std::
remove_reference_t
<
U
>
的任何左值
u,
以下条件均为真:
- t < u 、 t <= u 、 t > u 、 t >= u 、 u < t 、 u <= t 、 u > t 和 u >= t 具有相同的定义域;
- bool ( t < u ) == bool ( u > t ) ;
- bool ( u < t ) == bool ( t > u ) ;
- bool ( t <= u ) == bool ( u >= t ) ;以及
- bool ( u <= t ) == bool ( t >= u ) 。
等值保持性
标准库概念的 requires 表达式 中声明的表达式必须满足 等值保持 要求(除非另有说明)。
隐式表达式变体
对于某个常量左值操作数使用非修改表达式的 requires 表达式 ,同时要求具备 隐式表达式变体 。
参考文献
- C++23 标准 (ISO/IEC 14882:2024):
-
-
18.5.5 概念
totally_ordered[concept.totallyordered]
-
18.5.5 概念
- C++20 标准 (ISO/IEC 14882:2020):
-
-
18.5.4 概念
totally_ordered[concept.totallyordered]
-
18.5.4 概念
参见
|
规定
<=>
运算符在给定类型上产生一致结果
(概念) |