📜  3路运算符(空间船只运营)的C++ 20(1)

📅  最后修改于: 2023-12-03 15:13:08.489000             🧑  作者: Mango

3路运算符(空间船只运营)的C++ 20

在C++ 20中,3路运算符被称为“空间船只运营”(spaceship operator),它是一个比较运算符,用于比较两个值。它使用三个等于号(<=>)表示。

auto result = a <=> b;

当a小于b时,运算符返回一个负数;当a等于b时,返回0;当a大于b时,返回一个正数。

这个运算符还可以用于排序和比较很多自定义类型的对象。例如,假设我们有一个自定义的Person类,它有两个属性:姓名和年龄。我们可以使用空间船只运营符来比较两个Person对象。

class Person {
public:
    string name;
    int age;
    auto operator<=>(const Person& other) const {
        return age <=> other.age;
    }
};

// 比较两个Person对象
Person person1{"Alice", 30};
Person person2{"Bob", 25};

auto result = person1 <=> person2;

if(result < 0) {
    cout << person1.name << " is younger than " << person2.name << endl;
} else if(result > 0) {
    cout << person1.name << " is older than " << person2.name << endl;
} else {
    cout << person1.name << " and " << person2.name << " are of the same age" << endl;
}

在这个例子中,我们通过重载空间船只运算符来比较两个Person对象的年龄。如果第一个对象的年龄小于第二个对象,则结果是负数。如果第一个对象的年龄大于第二个对象,则结果是正数。如果它们年龄相等,则结果是0。

需要注意的是,在比较两个自定义类型对象时,最好使用空间船只运算符而不是小于或大于运算符。如果我们只定义了小于或大于运算符,编译器在比较两个对象时不知道应该返回0还是-1或1,因此可能会在编译或运行时产生错误。