首頁 > 後端開發 > C++ > 為什麼非預設的 Spaceship 運算子在 C 20 中不產生 `==` 和 `!=`?

為什麼非預設的 Spaceship 運算子在 C 20 中不產生 `==` 和 `!=`?

Linda Hamilton
發布: 2024-11-07 22:13:03
原創
296 人瀏覽過

Why Doesn't the Non-defaulted Spaceship Operator Generate `==` and `!=` in C  20?

為什麼非預設的Spaceship 運算子不產生== 和!=

在C 20 中使用新的spaceship 運算子() 時,重要的是要注意實作自訂運算子與依賴預設實作的含義。

在第一個範例中,您使用的是預設運算子;語言提供的實作。此預設實作允許編譯器自動產生 == 運算子。但是,當您實作自訂運算子時,函數時,編譯器無法再隱式產生對應的 == 運算子。

這種行為是有意為之,如C 標準所述([class.compare.default](https://en.cppreference.com /w/cpp/language/comparison#Class_comparison)) :

If the class definition does not explicitly declare an == operator function, but declares a defaulted three-way comparison operator function, an == operator function is declared implicitly with the same access as the three-way comparison operator function.
登入後複製

這種設計選擇背後的原因是為了防止在可能不是最有效的確定方法的情況下隱式生成==平等。例如,像 std::vector 這樣的類別不應使用非預設的 。用於相等測試,因為首先比較大小更有效。

在自訂 中實作時,該類別可能正在執行專門的操作,這些操作也需要 == 的自訂實作。因此,該語言不會產生潛在的非最佳預設實現,而是讓程式設計師明確定義 == 運算子。

以上是為什麼非預設的 Spaceship 運算子在 C 20 中不產生 `==` 和 `!=`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板