C++20概念中"equal"的概念
Concept of "equal" in C++20 concepts
我多次发现,在阅读一些概念定义时,术语 等于 的使用,如 Swappable
:
Let t1
and t2
be equality-preserving expressions that denote distinct equal objects of type T
,
等于是否在标准的某处定义?我猜这意味着两个对象的语义,或者它们引用的值(赋予它们表示的域值的人类语义)是相同的,即使对象不可比较(没有 operator==
重载),或者其他东西像那样抽象(例如,如果 a == b
假设它是一个有效的表达式,那么两个对象 a
和 b
是相等的——例如,因为 operator==
没有定义因为它不是必需的)。
由于模板将根据用户提供的语义工作,平等的概念主要由程序定义。例如,如果我使用不区分大小写的字符串,我可以认为字符串 FoO
和 fOo
相等,而 FoO
和 bAr
不相等。我提供的操作必须反映这种语义。
平等不是根据operator==
定义的;相反,operator==
(在某种意义上)是基于平等来定义的。 [concept.equalitycomparable]/equality_comparable:
template<class T>
concept equality_comparable = weakly-equality-comparable-with<T, T>;
Let a
and b
be objects of type T
. T
models
equality_comparable
only if bool(a == b)
is true
when a
is
equal to b
([concepts.equality]), and false
otherwise.
[ Note: The requirement that the expression a == b
is
equality-preserving implies that ==
is transitive and symmetric.
— end note ]
我多次发现,在阅读一些概念定义时,术语 等于 的使用,如 Swappable
:
Let
t1
andt2
be equality-preserving expressions that denote distinct equal objects of typeT
,
等于是否在标准的某处定义?我猜这意味着两个对象的语义,或者它们引用的值(赋予它们表示的域值的人类语义)是相同的,即使对象不可比较(没有 operator==
重载),或者其他东西像那样抽象(例如,如果 a == b
假设它是一个有效的表达式,那么两个对象 a
和 b
是相等的——例如,因为 operator==
没有定义因为它不是必需的)。
由于模板将根据用户提供的语义工作,平等的概念主要由程序定义。例如,如果我使用不区分大小写的字符串,我可以认为字符串 FoO
和 fOo
相等,而 FoO
和 bAr
不相等。我提供的操作必须反映这种语义。
平等不是根据operator==
定义的;相反,operator==
(在某种意义上)是基于平等来定义的。 [concept.equalitycomparable]/equality_comparable:
template<class T> concept equality_comparable = weakly-equality-comparable-with<T, T>;
Let
a
andb
be objects of typeT
.T
modelsequality_comparable
only ifbool(a == b)
istrue
whena
is equal tob
([concepts.equality]), andfalse
otherwise.[ Note: The requirement that the expression
a == b
is equality-preserving implies that==
is transitive and symmetric. — end note ]