跳到主要内容

C++ 命名要求: EqualityComparable

该类型必须与 == 运算符一起使用,并且结果应具有标准语义。

要求

如果类型 T 满足 EqualityComparable,则

给定

  • abc,类型为 T const T (自 C++17 起) 的表达式

以下表达式必须有效并具有其指定的效果

表达式返回类型要求
a == b可隐式转换为 bool建立等价关系,即它满足以下属性
* 对于 a 的所有值,a == a 都产生 true
* 如果 a == b,则 b == a
* 如果 a == bb == c,则 a == c

备注

为了满足此要求,没有内置比较运算符的类型必须提供用户定义的 operator==

对于既是 EqualityComparable 又是 LessThanComparable 的类型,C++ 标准库区分了相等(表达式 a == b 的值)和等价(表达式 !(a < b) && !(b < a) 的值)。

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 283C++98即使 T 是 EqualityComparable,这些要求也不适用于 const T 对象它们适用于 const T 而不是 T

C++ 命名要求: EqualityComparable

该类型必须与 == 运算符一起使用,并且结果应具有标准语义。

要求

如果类型 T 满足 EqualityComparable,则

给定

  • abc,类型为 T const T (自 C++17 起) 的表达式

以下表达式必须有效并具有其指定的效果

表达式返回类型要求
a == b可隐式转换为 bool建立等价关系,即它满足以下属性
* 对于 a 的所有值,a == a 都产生 true
* 如果 a == b,则 b == a
* 如果 a == bb == c,则 a == c

备注

为了满足此要求,没有内置比较运算符的类型必须提供用户定义的 operator==

对于既是 EqualityComparable 又是 LessThanComparable 的类型,C++ 标准库区分了相等(表达式 a == b 的值)和等价(表达式 !(a < b) && !(b < a) 的值)。

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 283C++98即使 T 是 EqualityComparable,这些要求也不适用于 const T 对象它们适用于 const T 而不是 T