【发布时间】:2021-07-20 21:01:03
【问题描述】:
#include <compare>
#include <iostream>
int main()
{
auto comp1 = 1.1 <=> 2.2;
auto comp2 = -1 <=> 1;
std::cout << typeid(comp1).name()<<"\n"<<typeid(comp2).name();
}
输出:
结构 std::partial_ordering
struct std::strong_ordering
我知道,如果操作数是整数类型,则运算符会返回 std::strong_ordering 类型的 PRvalue。我还知道操作数是否具有浮点类型,该运算符会产生 std::partial_ordering 类型的 PRvalue。
但是为什么我应该使用三路比较运算符而不是二路运算符(==、!=、<、<=、>、>=)?这对我有好处吗?
【问题讨论】:
-
这取决于我要说的上下文。如果您正在创建一个类,实现
operator<=>(如果可能,甚至是defaulting)可以节省时间(开发和维护),而不必手动实现所有。另一方面,如果您有兴趣了解if( 1.1 < 2.2 ),那么使用<=>可能没有多大意义 -
使用 2 个比较运算符
<=>和==编写的代码更少。与编写 6 个比较运算符相比,出现错误/错误的可能性更小。 -
您是在询问使用
<=>进行比较,还是在任何一般情况下使用<=>? -
@DrewDormann 其实两者都有
标签: c++ c++20 comparison-operators spaceship-operator