C++20三向比较运算符详解
创始人
2024-11-14 22:33:48
0次

三向比较运算符可以用于确定两个值的大小顺序,也被称为太空飞船操作符。使用单个表达式,它可以告诉一个值是否等于,小于或大于另一个值。

它返回的是类枚举(enumeration-like)类型,定义在 与 std 名称空间中。其运算的结果如下:

数据类型值含义
如果操作数为整数类型,其结果称为 强排序(strong_ordering)strong_ordering::less左边的操作数小于右边的操作数
strong_ordering::greater左边的操作数大于右边的操作数
strong_ordering::equal左边的操作数等于右边的操作数
如果操作数为浮点类型,其结果称为 偏序(partial_ordering)partial_ordering::less左边的操作数小于右边的操作数
partial_ordering::greater左边的操作数大于右边的操作数
partial_ordering::equivalent左边的操作数等于右边的操作数
partial_ordering::unordered无法比较时(有一个非数字)
如果操作数为自己实现的类型,称为 弱排序(weak_ordering)weak_ordering::less左边的操作数小于右边的操作数
weak_ordering::greater左边的操作数大于右边的操作数
weak_ordering::equivalent左边的操作数等于右边的操作数

三向比较运算符的用法

三向比较运算符的使用方式如下:

#include   using namespace std;  int main() {     int i{ 11 };     strong_ordering result{ i <=> 0 };     cout << typeid(result).name() << endl;      if (result == strong_ordering::less) { cout << "less" << endl; };     if (result == strong_ordering::greater) { cout << "greater" << endl; };     if (result == strong_ordering::equal) { cout << "equal" << endl; };      return 0; } 

可以得到以下的输出结果

struct std::strong_ordering greater 

同时, 还提供了一些函数来解释排序结果,有以下几种:std::is_eq(),is_neq(),is_lt(),is_lteq(),is_gt(),is_gteq()。

使用的方式如下:

#include  #include  using namespace std;  int main() {     int i{ 11 };     strong_ordering result{ i <=> 0 };     cout << typeid(result).name() << endl;      if (is_lt(result)) { cout << "less" << endl; };     if (is_gt(result)) { cout << "greater" << endl; };     if (is_eq(result)) { cout << "equal" << endl; };      return 0; } 

三向比较运算符的作用

在编写自己的类时,如果需要实现比较运算符,在 C++20 之前,通常要重载 6 个比较运算符:(>,<,<=,>=,==, !=)。在 C++20 引入了三向比较运算符以后,就可以只重载 <=> 与 == 后,其他的运算符会由编译器为我们生成。(在 C++20 中,重载了 == 后,!= 也会自动重载)

以下是使用示例:

#include  #include  using namespace std;  class MyClass { public:     MyClass(int ini) : _data{ ini } {}      auto operator<=>(const MyClass& other) const {         return this->_data <=> other._data;     }     auto operator==(const MyClass& other) const {         return this->_data == other._data;     } private:     int _data; };  int main() {     MyClass a{ 10 }, b{ 20 };      if (a < b) {         cout << "a < b" << endl;     }     if (a != b) {         cout << "a != b" << endl;     }      return 0; } 

可以得到以下的运算结果:

a < b a != b 

相关内容

热门资讯

揭秘一下透视器插件!桃乐甘肃麻... 揭秘一下透视器插件!桃乐甘肃麻将多功能透视器插件,桃乐甘肃麻将好像有透视器插件1、点击下载安装,桃乐...
终于懂了!国民麻将辅助ai脚本... 终于懂了!国民麻将辅助ai脚本软件,国民麻将其实真的是有辅助ai总结方法1、完成国民麻将有辅助插件,...
今日公布辅助器攻略!微乐福建麻... 今日公布辅助器攻略!微乐福建麻将多功能辅助器攻略,微乐福建麻将总是真的是有辅助器攻略1、金币登录送、...
实操分享!闲娱江西棋牌开挂ai... 实操分享!闲娱江西棋牌开挂ai脚本软件,闲娱江西棋牌总是是真的有开挂ai总结神器1、下载好闲娱江西棋...
一分钟秒懂作弊器攻略!天天芜湖... 一分钟秒懂作弊器攻略!天天芜湖麻将多功能作弊器攻略,天天芜湖麻将好像真的有作弊器攻略1、这是跨平台的...
推荐几款新版!吉祥全港麻将开挂... 您好,吉祥全港麻将这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家在...
来一盘外挂插件!大唐麻将游戏多... 来一盘外挂插件!大唐麻将游戏多功能外挂插件,大唐麻将游戏真是存在有外挂插件所有人都在同一条线上,像星...
揭秘一下!趣玩情怀辅助ai脚本... 揭秘一下!趣玩情怀辅助ai脚本软件,趣玩情怀原来有辅助ai解密攻略趣玩情怀破解侠是真的助透视。每个模...
玩家必备教程透视器插件!鲁乐山... 玩家必备教程透视器插件!鲁乐山东麻将多功能透视器插件,鲁乐山东麻将都是有透视器插件玩家必备教程透视器...
记者发布!中至常熟麻将辅助ai... 记者发布!中至常熟麻将辅助ai脚本软件,中至常熟麻将总是是真的有辅助ai曝光软件1、中至常熟麻将模拟...