C++20的三向比较运算符简化了对象比较,只需定义一次即可自动生成所有关系运算符。其原理是按字段顺序比较,返回强弱序结果,支持自动合成==和!=。手动实现时可自定义逻辑,如先比较x再比较y。主要好处是减少重复代码、提升一致性,适用于数据聚合类、需排序类型及追求简洁语义的项目,显著增强代码可读性与维护性。

在C++20中,三向比较运算符(也被称为“宇宙飞船运算符”)是一种全新的语言特性,它让对象之间的比较变得更简单、更直观。这个运算符的符号是,因其形状酷似宇宙飞船而得名。它的主要作用是用一个操作符表达所有关系比较(如=、>),从而减少重复代码。
三向比较的基本原理
传统的C++类如果需要支持比较操作,开发者必须手动实现多个运算符,比如==、!=、、,通过一次定义,编译器可以自动生成其他比较运算符。
三向比较的结果是一个比较类别类型,常见的有:
- std::strong_ordering:表示对象完全可排序且相等意味着值相同(如整数)
- std::weak_ordering:允许不完全等价(如大小写不敏感的字符串)
- std::partial_ordering:支持浮点数这类可能产生NaN的情况
如何使用简化代码
假设你有一个简单的结构体Point,包含x和y坐标。在C++20之前,你需要写多个函数来支持比较。现在只需一行即可:
立即学习“C++免费学习笔记(深入)”;
struct Point {
int x, y;
auto operator<=>(const Point&) const = default;
};
加上= default后,编译器会自动生成合理的三向比较逻辑,基于成员逐个比较。之后你就可以直接使用、编码更轻松,尤其是在处理大量可比较对象时。合理使用,能显著提升代码的可读性和维护性。










