华强北网站建设,项目网络图怎么绘制,直播软件app下载免费,教育类型网站三向比较运算符可以用于确定两个值的大小顺序#xff0c;也被称为太空飞船操作符。使用单个表达式#xff0c;它可以告诉一个值是否等于#xff0c;小于或大于另一个值。 它返回的是类枚举#xff08;enumeration-like#xff09;类型#xff0c;定义在 compare …三向比较运算符可以用于确定两个值的大小顺序也被称为太空飞船操作符。使用单个表达式它可以告诉一个值是否等于小于或大于另一个值。 它返回的是类枚举enumeration-like类型定义在 compare 与 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 iostreamusing 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同时compare 还提供了一些函数来解释排序结果有以下几种std::is_eq()is_neq()is_lt()is_lteq()is_gt()is_gteq()。
使用的方式如下
#include iostream
#include compare
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;
}三向比较运算符的作用
在编写自己的类时如果需要实现比较运算符在 C20 之前通常要重载 6 个比较运算符, !。在 C20 引入了三向比较运算符以后就可以只重载 与 后其他的运算符会由编译器为我们生成。在 C20 中重载了 后! 也会自动重载
以下是使用示例
#include iostream
#include compare
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