std::equality_comparable (自 C++20 起),std::equality_comparable_with (自 C++20 起)
在头文件 <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
时才建模,bool(a == b) 当且仅当 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 起) |
[edit] 保持等式
标准库概念的 requires 表达式 中声明的表达式需要 保持等式(除非另有说明)。
[edit] 隐式表达式变体
对于某个常量左值操作数是非修改的表达式的 requires 表达式 也需要 隐式表达式变体。
[edit] 参考文献
- C++23 标准 (ISO/IEC 14882:2024)
- 18.5.4 概念
equality_comparable
[concept.equalitycomparable]
- 18.5.4 概念
- C++20 标准 (ISO/IEC 14882:2020)
- 18.5.3 概念
equality_comparable
[concept.equalitycomparable]
- 18.5.3 概念