比較
眾所周知,在C++中你不能總是很好地比較不同類型的整數(shù)。例如比較int x{ 1 }和unsigned y{ -1 },編譯器會說x小于y(因為有符號類型會被隱式轉(zhuǎn)換為無符號類型),但實際上我們想要的是1大于-1。
于是C++20給出了一組更安全的比較整數(shù)大小的函數(shù),它們包含在<utility>頭文件中。

每個函數(shù)都有兩個參數(shù),分別對應(yīng)于運算符的左邊和右邊,函數(shù)返回一個布爾值。
Case :

下面是一個std::cmp_less()的簡單實現(xiàn):

三向比較運算符
C++20引入了三向比較運算符(<=>),也被稱為 "Spaceship Operator" 。

若操作數(shù)為整型,則運算符的返回值是std::strong_ordering類型:其中strong_ordering::equal表示左右相等,strong_ordering::less表示左小于右,strong_ordering::greater表示左大于右。
若操作數(shù)為浮點型,則返回值是std::partial_ordering類型:其中partial_ordering::equivalent表示左右等價,partial_ordering::less和partial_ordering::greater同上,partial_ordering::unordered表示無序(無法比較)。
--------------------------------------------------------------------------------------------------------------------
三向操作符的作用在于能夠簡化類中的比較重載。假設(shè)我們定義了一個類,并需要為這個類提供比較運算符,即一共需要重載六次運算符。但現(xiàn)在只需要重載一次三向運算符即可。
Case :

在這里我們使用了default關(guān)鍵字進行三向運算符的默認實現(xiàn)。
再來看一個復雜點的例子。

這里我們不僅需要定義<=>的重載,還需要重載運算符==。因為雖然三向運算符知道兩個分數(shù)對象之間的大小關(guān)系,但它無法判斷兩個對象的相等與否。在我們定義了運算符==后,編譯器就可以自動重寫!=表達式。