首页 > 后端开发 > C++ > 正文

c++怎么使用C++20的三路比较运算符_c++ C++20三路比较运算符使用方法

下次还敢
发布: 2025-10-03 23:06:01
原创
635人浏览过
三路比较运算符(<=>)简化C++20中类类型的比较,自动推导大小关系并返回std::strong_ordering等类型;基本用法如int比较所示,自定义类可默认生成或手动实现operator<=>,按成员顺序逐个比较;手动实现时可通过if(auto cmp = ...; cmp != 0)优化逻辑;定义<=>后编译器自动生成==、!=、<、<=、>、>=,但建议单独定义operator==以提升性能;整体减少样板代码,提升安全性与简洁性。

c++怎么使用c++20的三路比较运算符_c++ c++20三路比较运算符使用方法

在C++20中,三路比较运算符(<=>),也被称为“太空船运算符”(spaceship operator),可以简化类类型的比较操作。它能自动推导出两个对象之间的大小关系,返回一个比较类别类型,比如 std::strong_orderingstd::weak_orderingstd::partial_ordering

基本语法与返回值

三路比较运算符的返回值表示比较结果:

  • a <=> b 返回负值:a 小于 b
  • a <=> b 返回 0:a 等于 b
  • a <=> b 返回正值:a 大于 b

常见使用方式如下:

#include <iostream>
#include <compare>

int main() {
    int x = 5, y = 3;
    auto result = x <=> y;

    if (result > 0) {
        std::cout << "x > y\n";
    } else if (result < 0) {
        std::cout << "x < y\n";
    } else {
        std::cout << "x == y\n";
    }

    return 0;
}
登录后复制

自定义类型的默认三路比较

对于自定义类,如果所有成员都支持 <=>,可以使用 = default 自动生成比较操作。

立即学习C++免费学习笔记(深入)”;

#include <iostream>
#include <compare>

struct Point {
    int x;
    int y;

    // 自动生成三路比较
    auto operator<=>(const Point&) const = default;
};

int main() {
    Point a{1, 2}, b{1, 3};

    if (a < b) std::cout << "a < b\n";
    if (a <= b) std::cout << "a <= b\n";
    if (a != b) std::cout << "a != b\n";

    return 0;
}
登录后复制

编译器会逐个成员按声明顺序比较,相当于先比 x,再比 y

MagicStudio
MagicStudio

图片处理必备效率神器!为你的图片提供神奇魔法

MagicStudio 102
查看详情 MagicStudio

手动实现三路比较

如果需要自定义逻辑,也可以手动实现 operator<=>

struct Person {
    std::string name;
    int age;

    auto operator<=>(const Person& other) const {
        if (auto cmp = name <=> other.name; cmp != 0)
            return cmp;
        return age <=> other.age;
    }
};
登录后复制

上面的例子先比较名字,名字相等时再比较年龄。利用 if (auto cmp = ...; cmp != 0) 可以提前返回非零结果。

与普通比较操作符的关系

C++20 中,只要定义了 operator<=>,编译器就能自动生成 ==!=<<=>>= 的行为。

但注意:operator== 不参与三路比较,建议单独定义以提高效率(特别是对容器或字符串)。

bool operator==(const Person& other) const {
    return name == other.name && age == other.age;
}
登录后复制

基本上就这些。三路比较减少了样板代码,让类的比较更简洁安全。只要成员支持比较,用 = default 是最省事的方式。手动实现时注意比较顺序和返回类型即可。不复杂但容易忽略细节。

以上就是c++++怎么使用C++20的三路比较运算符_c++ C++20三路比较运算符使用方法的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号