比较
2023-08-01 22:38:36
来源: 哔哩哔哩
众所周知,在C++中你不能总是很好地比较不同类型的整数。例如比较int x{ 1 }和unsigned y{ -1 },编译器会说x小于y(因为有符号类型会被隐式转换为无符号类型),但实际上我们想要的是1大于-1。
于是C++20给出了一组更安全的比较整数大小的函数,它们包含在<utility>头文件中。
(资料图)
每个函数都有两个参数,分别对应于运算符的左边和右边,函数返回一个布尔值。
Case :
下面是一个std::cmp_less()的简单实现:
三向比较运算符
C++20引入了三向比较运算符(<=>),也被称为 "Spaceship Operator" 。
若操作数为整型,则运算符的返回值是std::strong_ordering类型:其中strong_ordering::equal表示左右相等,strong_ordering::less表示左小于右,strong_ordering::greater表示左大于右。
若操作数为浮点型,则返回值是std::partial_ordering类型:其中partial_ordering::equivalent表示左右等价,partial_ordering::less和partial_ordering::greater同上,partial_ordering::unordered表示无序(无法比较)。
--------------------------------------------------------------------------------------------------------------------
三向操作符的作用在于能够简化类中的比较重载。假设我们定义了一个类,并需要为这个类提供比较运算符,即一共需要重载六次运算符。但现在只需要重载一次三向运算符即可。
Case :
在这里我们使用了default关键字进行三向运算符的默认实现。
再来看一个复杂点的例子。
这里我们不仅需要定义<=>的重载,还需要重载运算符==。因为虽然三向运算符知道两个分数对象之间的大小关系,但它无法判断两个对象的相等与否。在我们定义了运算符==后,编译器就可以自动重写!=表达式。
关键词:
[责任编辑:sdssw]