C++ 命名要求: EqualityComparable
该类型必须与 == 运算符一起使用,并且结果应具有标准语义。
要求
如果类型 T 满足 EqualityComparable,则
给定
a
、b
和c
,类型为T
或const T
(自 C++17 起) 的表达式
以下表达式必须有效并具有其指定的效果
表达式 | 返回类型 | 要求 |
---|---|---|
a == b | 可隐式转换为 bool | 建立等价关系,即它满足以下属性 * 对于 a 的所有值,a == a 都产生 true。* 如果 a == b ,则 b == a * 如果 a == b 且 b == c ,则 a == c |
备注
为了满足此要求,没有内置比较运算符的类型必须提供用户定义的 operator==。
对于既是 EqualityComparable 又是 LessThanComparable 的类型,C++ 标准库区分了相等(表达式 a == b
的值)和等价(表达式 !(a < b) && !(b < a)
的值)。
缺陷报告
以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 发布时的行为 | 正确行为 |
---|---|---|---|
LWG 283 | C++98 | 即使 T 是 EqualityComparable,这些要求也不适用于 const T 对象 | 它们适用于 const T 而不是 T |