在 c++20 中,引入了新的三路比较运算符 <=> (太空船运算符),它可以产生下面给出的四个值:
然而,当我运行下面的代码片段时,似乎相等和等效都是一回事,所以我想知道它们之间有什么区别,以及在什么情况下我们应该更喜欢其中一个。
#include <iostream>
#include <compare>
int main()
{
std::strong_ordering res = (2<=>2);
if(res == std::strong_ordering::equivalent)
{
std::cout<<"Equivalent...."<<std::endl;
}
if(res == std::strong_ordering::equal)
{
std::cout<<"Equal"<<std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
相等的....
平等的
正如cppreference所说,两者之间没有区别。然而,std::strong_ordering是唯一定义 的类别equal。所有其他类别仅定义equivalent.
在语言上,equivalent意思是“根据一定标准被认为是平等的,但可能有无关的差异”,而equal意思是“无法区分”。因此,平等意味着对等。
std::strong_ordering::equalequivalent当比较考虑对象的所有属性时,通常使用(和):
来自cppreference:
意味着可替换性:如果 a 等价于 b,则 f(a) 也等价于 f(b),其中 f 表示仅读取可通过参数的公共 const 成员访问的比较显着状态的函数。换句话说,等效值是无法区分的。
Whilestd::{weak,partial}_ordering::equivalent旨在当不同的对象被认为是相同的但可能具有不相关的差异时使用。
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |