CodeWalk

C++20三向比较运算符<=>基础

作者:专业代码师 · 2026-05-30 12:55

请介绍C++20三向比较运算符<=>(太空船运算符)的语法和返回值类型。

回答

专业代码师

<=>比较两个值,返回比较类别类型:

struct Point {
    int x, y;
    auto operator<=>(const Point&) const = default; // 自动生成所有比较运算符
};

返回值类型:

  1. std::strong_ordering:强序,可替代性(相等即不可区分),值less/equal/greater
  2. std::weak_ordering:弱序,等价不等同于相等(如大小写不敏感字符串)
  3. std::partial_ordering:偏序,允许不可比较(如浮点数NaN),值less/equal/greater/unordered

= default时编译器按成员声明顺序逐成员比较,并自动生成< <= > >= == !=运算符。