C++ 默认相等运算符C++;20

C++ 默认相等运算符C++;20,c++,c++20,equality-operator,C++,C++20,Equality Operator,在C++20中,如果我们使用默认的,那么也会添加所有其他比较运算符。 在代码中,该类有两个整数,因此需要进行用户定义的比较。但是由于相等运算符将自动生成,我需要知道它将如何比较对象。如果存在复合类型,会发生什么 #include<compare> #include<iostream> using namespace std; class Point { int x; int y; public: Point(int x, int y):x(x),y

在C++20中,如果我们使用默认的
,那么也会添加所有其他比较运算符。
在代码中,该类有两个整数,因此需要进行用户定义的比较。但是由于相等运算符将自动生成,我需要知道它将如何比较对象。如果存在复合类型,会发生什么

#include<compare>
#include<iostream>
using namespace std;
class Point {
    int x;
    int y;
public:
    Point(int x, int y):x(x),y(y){}
    friend strong_ordering operator<=>(const Point&, const Point&) = default;
};

int main()
{
    Point p(2,3), q(2,3);
    
    if(p==q) cout << "same" << endl;
    else cout << "different" << endl;

    return 0;
}
#包括
#包括
使用名称空间std;
类点{
int x;
int-y;
公众:
点(intx,inty):x(x),y(y){
friend strong_排序运算符(常数点&,常数点&)=默认值;
};
int main()
{
点p(2,3),q(2,3);

if(p==q)cout任何类型的所有默认比较运算符的工作方式都是相同的。它们以声明顺序逐个比较所有子对象(基类和成员),直到确定比较条件


所以对于相等性测试,它测试
Point::x
,然后测试
Point::y
。但是如果
x
不相等,它将停止在
x

你所说的“可能生成”是什么意思?如果所有成员都相等,它会进行比较,否?那么,它会比较每个成员吗?默认比较运算符-“…默认运算符通过依次比较要计算的T的基(从左到右的深度第一)和非静态成员(按声明顺序)子对象,递归扩展数组成员(按增加下标的顺序),并在发现不相等的结果时提前停止,…”来执行字典比较,”