C++ named requirements: EqualityComparable
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
该类型必须能够与
==
运算符配合使用,且运算结果应符合标准语义。
目录 |
要求
类型
T
满足
可相等比较
的要求,当给定类型为
T
或
(C++11 起)
const
T
的表达式
a
、
b
和
c
时,下列表达式合法且具有指定效果:
| 表达式 | 类型 | 效果 |
|---|---|---|
| a == b |
满足
BooleanTestable
(C++20 前) |
建立
等价关系
,即满足以下性质:
|
建模
boolean-testable
(C++20 起) |
注释
为满足此要求,没有内置 比较运算符 的类型必须提供 用户自定义的 operator == 。
对于同时满足 可相等比较 和 可小于比较 的类型,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
的能力过弱,
无法反映实现预期 |
要求已加强 |
参见
|
指定
==
运算符为等价关系
(概念) |