C++ 具名要求:可相等比较 (EqualityComparable)
来自cppreference.com
类型必须能使用 ==
运算符且结果应当具有标准语义。
要求
对于类型 T
,给定 T
或 (C++11 起) const T 类型的表达式 a、b 和 c,如果以下表达式合法且具有指定的效果,那么 T
满足可相等比较 (EqualityComparable) :
表达式 | 类型 | 要求 |
---|---|---|
a == b | 符合可布尔测试 (BooleanTestable) (C++20 前) |
建立一种等价关系,即满足以下所有性质:
|
实现 boolean-testable (C++20 起) |
注解
为满足此要求,没有内建比较运算符的类型必须提供用户定义的 operator==。
对于既可相等比较 (EqualityComparable) 也可小于比较 (LessThanComparable) 的类型,C++ 标准库区分:
- 相等(即表达式 a == b 的值)和
- 等价(即表达式 !(a < b) && !(b < a) 的值)
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 283 | C++98 | 即使 T 是 可相等比较 (EqualityComparable) 的,const T 类型的对象也不适用这些要求
|
适用于 const T 而不是 T
|
LWG 2114 (P2167R3) |
C++98 | 到 bool 的可转换性过于弱而无法反映实现的期待 | 加强要求 |
参阅
指定运算符 == 为等价关系 (概念) |