首頁 >後端開發 >C++ >為什麼 C 20 中的自訂太空船運算子會阻止自動相等比較?

為什麼 C 20 中的自訂太空船運算子會阻止自動相等比較?

Linda Hamilton
Linda Hamilton原創
2024-11-07 15:05:03198瀏覽

Why Does a Custom Spaceship Operator in C  20 Prevent Automatic Equality Comparison?

太空船運算子和等式比較

C 20 太空船運算子(也稱為)引入了方便簡潔的語法用於比較值。但是,在某些情況下,它可能不會產生預期的相等和不等運算子(== 和 !=)。本問題探討了這種行為以及為什麼自訂太空船運算子實作可以阻止創建這些附加運算子。

問題描述

考慮以下程式碼片段,其中太空船運算子在具有預設實現的結構中使用:

此程式碼編譯時沒有錯誤。但是,如果我們定義自訂太空船運算子實現:

嘗試使用相等運算子(==) 時,編譯器會發出錯誤:

解釋

根據語言標準的定義,此行為是有意的。當類別具有預設的太空船運算子時,編譯器會合成相等運算子的預設實作。然而,如果太空船運算子是用自訂定義實現的,編譯器不會自動產生相等運算子。

這種差異源自於對效率的考量。太空船運算子旨在提供值的完整排序,而相等運算子 (==) 可以執行最佳化,例如在嘗試完全比較之前比較大小。對於像 std::vector 這樣的類,使用 spaceship 運算子進行相等比較可能不是最有效的方法。

透過將其留給程式設計師來實現相等運算符,編譯器可以避免產生非- 最佳化實作。因此,如果一個類別具有非預設的太空船運算符,則開發人員也必須明確定義相等運算符。

以上是為什麼 C 20 中的自訂太空船運算子會阻止自動相等比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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