在阅读一些概念定义时,我发现多次使用术语等于,例如Swappable
:
让
t1
和t2
为保全表达式,它们表示T
类型的不同 equal 对象,
等于是否在标准中定义?我想这意味着两个对象的语义或它们引用的值(赋予它们表示的域值的人类语义)是相同的,即使对象不具有可比性(没有operator==
重载),也可能是某种东西像这样的抽象(例如,如果a
假设它是一个有效的表达式,则两个对象b
和a == b
相等,例如,因为operator==
未定义因为它不是必需的。)
答案 0 :(得分:2)
由于模板将根据用户给出的语义进行工作,因此平等的概念很大程度上由程序定义。例如,如果我使用不区分大小写的字符串,则可以认为字符串FoO
和fOo
是相等的,而FoO
和bAr
是不相等的。我提供的操作必须反映这种语义。
平等不是基于operator==
来定义的;相反,operator==
在某种意义上是基于相等性定义的。 [concept.equalitycomparable]/equality_comparable:
template<class T> concept equality_comparable = weakly-equality-comparable-with<T, T>;
让
a
和b
为T
类型的对象。T
个模型 仅当equality_comparable
为bool(a == b)
时true
为a
等于b
([concepts.equality]),否则等于false
。[注意:表达式
a == b
为 保持平等意味着==
是传递的和对称的。 — 尾注]