首頁  >  文章  >  後端開發  >  為什麼在 C 20 中不能將 `==` 和 `!=` 與自訂 `<=>` 運算子一起使用?

為什麼在 C 20 中不能將 `==` 和 `!=` 與自訂 `<=>` 運算子一起使用?

Linda Hamilton
Linda Hamilton原創
2024-11-07 21:11:03988瀏覽

Why Can't I Use `==` and `!=` with a Custom `<=>` C 20 中的運算子? 
` C 20 中的運算子? " />

非預設運算子 且缺少== 和!=

在C 20 中,太空船運算子 ; 提供了通用比較機制。 > 的預設實現的以下程式碼:

在這種情況下,程式碼編譯成功並允許使用== 和!= 來比較X 的實例:

自訂實作區塊== 和!=

但是,當提供 的自訂實作時:

編譯導致錯誤:

行為原因

根據C 20 標準,此行為是故意的:

如果類別定義沒有顯式聲明== 運算子函數,而是宣告預設三向比較函數,則隱式宣告== 運算子函數,其存取權限與三向比較運算子函數相同.

只有預設的;運算符產生一個合成的==。 ,如果一個類別有自訂;實作時,程式設計師還必須提供自訂== 實作以確保正確的比較行為。

以上是為什麼在 C 20 中不能將 `==` 和 `!=` 與自訂 `<=>` 運算子一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn