std::equality_comparable, std::equality_comparable_with
定义于头文件 <concepts> |
||
template< class T > concept equality_comparable = __WeaklyEqualityComparableWith<T, T>; |
(1) | (C++20 起) |
template< class T, class U > concept equality_comparable_with = |
(2) | (C++20 起) |
辅助概念 |
||
template< class T, class U > concept __WeaklyEqualityComparableWith = |
(3) | (仅作说明*) |
(4) | ||
template< class T, class U > concept __ComparisonCommonTypeWith = |
(直至 C++23) (仅作说明*) |
|
template< class T, class U, class C = std::common_reference_t<const T&, const U&> > concept _ComparisonCommonTypeWithImpl = |
(C++23 起) (仅作说明*) |
|
std::equality_comparable
指定类型 T
上的比较运算符 ==
和 !=
反映相等性:当且仅当操作数相等时,==
返回 true。std::equality_comparable_with
指定(可能是混合的)T
和 U
操作数上的比较运算符 ==
和 !=
产生与相等性一致的结果。比较混合操作数产生的结果等同于将操作数转换为其共同类型后进行比较。__WeaklyEqualityComparableWith
指定类型 T
的对象和类型 U
的对象可以相互(按任意顺序)使用 ==
和 !=
进行相等性比较,并且比较结果是一致的。__ComparisonCommonTypeWith
指定两种类型共享一个共同类型,并且任一类型的 const 左值 或非 const 右值(C++23 起) 可转换为该共同类型。目录 |
[编辑] 语义要求
这些概念只有在它们自身满足并且它们所包含的所有概念都满足时才被建模。
在以下段落中,给定表达式 E
和类型 C
,CONVERT_TO<C>(E) 定义为
|
(直至 C++23) |
|
(C++23 起) |
T
的对象 a
和 b
,当且仅当 a
和 b
相等时,bool(a == b) 为 true。结合 a == b 是保持相等的要求,这意味着 ==
是对称和传递的,并且对于所有至少与一个其他对象相等的对象 a
来说,==
是自反的。-
t
和t2
为分别表示类型 const std::remove_reference_t<T> 和 std::remove_cvref_t<T> 的不同相等对象的左值, -
u
和u2
为分别表示类型 const std::remove_reference_t<U> 和 std::remove_cvref_t<U> 的不同相等对象的左值, -
C
为 std::common_reference_t<const std::remove_reference_t<T>&, const std::remove_reference_t<U>&>,
以下表达式为真:
- bool(t == u) == bool(CONVERT_TO<C>(t2) == CONVERT_TO<C>(u2)).
-
t
,类型为 const std::remove_reference_t<T> 的左值,以及 -
u
,类型为 const std::remove_reference_t<U> 的左值,
以下为真:
- t == u、u == t、t != u、u != t 具有相同的域;
- bool(u == t) == bool(t == u);
- bool(t != u) == !bool(t == u);以及
- bool(u != t) == bool(t != u).
对应的 |
(直至 C++23) |
令
以下条件成立:
|
(C++23 起) |
[编辑] 保持相等
标准库概念的 requires 表达式中声明的表达式必须是保持相等的(除非另有说明)。
[编辑] 隐式表达式变体
使用对于某个常量左值操作数是非修改性表达式的 requires 表达式也需要隐式表达式变体。
[编辑] 参考
- C++23 标准 (ISO/IEC 14882:2024)
- 18.5.4 Concept
equality_comparable
[concept.equalitycomparable]
- 18.5.4 Concept
- C++20 标准 (ISO/IEC 14882:2020)
- 18.5.3 Concept
equality_comparable
[concept.equalitycomparable]
- 18.5.3 Concept