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 

相关内容

热门资讯

重磅来袭!wepoker辅助挂... 重磅来袭!wepoker辅助挂多功能透视工具,真是有挂(有挂猫腻)1、不需要AI权限,帮助你快速的进...
分享一款!aapoker辅助挂... 分享一款!aapoker辅助挂多功能透视工具,竟然存在有挂(有挂详情)1、进入到aapoker是否有...
一分钟了解!德普之星辅助挂多功... 一分钟了解!德普之星辅助挂多功能透视工具,其实存在有挂(有挂详情)1、每一步都需要思考,不同水平的挑...
2024教程!wepoker辅... 2024教程!wepoker辅助挂多功能透视工具,切实是有挂(揭秘有挂)1)wepoker有没有挂:...
重大科普!WPK辅助挂多功能透... 重大科普!WPK辅助挂多功能透视工具,确实真的有挂(确实有挂)1、玩家可以在WPK透视最简单三个步骤...
让我来分享经验!WPK辅助挂多... 让我来分享经验!WPK辅助挂多功能透视工具,确实存在有挂(有挂细节)在进入WPK软件靠谱后,参与本局...
科技分享!wpk辅助挂多功能透... 科技分享!wpk辅助挂多功能透视工具,确实是有挂(有挂工具)1、首先打开wpk辅助器下载最新版本,在...
科技介绍!AAPoKer辅助挂... 科技介绍!AAPoKer辅助挂多功能透视工具,真是有挂(揭秘有挂)1、不需要AI权限,帮助你快速的进...
发现一款!智星德州扑克辅助挂多... 发现一款!智星德州扑克辅助挂多功能透视工具,确实存在有挂(有挂猫腻)1、智星德州扑克免费辅助多个强度...
玩家攻略推荐!红龙poker辅... 玩家攻略推荐!红龙poker辅助挂多功能透视工具,切实是真的有挂(了解有挂)1、红龙poker有没有...