C ++ 20概念中的“相等”概念

时间:2019-07-21 00:58:07

标签: c++ equality c++20 c++-concepts

在阅读一些概念定义时,我发现多次使用术语等于,例如Swappable

  

t1t2保全表达式,它们表示T类型的不同 equal 对象,

等于是否在标准中定义?我想这意味着两个对象的语义或它们引用的值(赋予它们表示的域值的人类语义)是相同的,即使对象不具有可比性(没有operator==重载),也可能是某种东西像这样的抽象(例如,如果a假设它是一个有效的表达式,则两个对象ba == b相等,例如,因为operator==未定义因为它不是必需的。)

1 个答案:

答案 0 :(得分:2)

由于模板将根据用户给出的语义进行工作,因此平等的概念很大程度上由程序定义。例如,如果我使用不区分大小写的字符串,则可以认为字符串FoOfOo是相等的,而FoObAr是不相等的。我提供的操作必须反映这种语义。

平等不是基于operator==来定义的;相反,operator==在某种意义上是基于相等性定义的。 [concept.equalitycomparable]/equality_comparable

template<class T>
  concept equality_comparable = weakly-equality-comparable-with<T, T>;
     

abT类型的对象。 T个模型   仅当equality_­comparablebool(a == b)truea   等于b ([concepts.equality]),否则等于false

     

[注意:表达式a == b为   保持平等意味着==是传递的和对称的。   — 尾注]