📅  最后修改于: 2023-12-03 15:13:08.489000             🧑  作者: Mango
在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,因此可能会在编译或运行时产生错误。