首頁 > 後端開發 > C++ > 使用自訂太空船運算子是否會阻止 C 中相等運算子的生成?

使用自訂太空船運算子是否會阻止 C 中相等運算子的生成?

DDD
發布: 2024-11-09 17:56:02
原創
818 人瀏覽過

Does Using a Custom Spaceship Operator Prevent the Generation of Equality Operators in C  ?

太空船運算子及其對等式運算子的影響

太空船運算子,在C 20中引入,提供了一個簡潔的三向比較的語法。但是,在使用太空船運算符和相等運算符(== 和 !=)時遇到意外行為的使用者可能會感到驚訝。

預設實作和產生的相等運算子

當spaceship 運算子被宣告為預設值時(例如,auto operator(const X&) const = default;),它使編譯器能夠根據底層比較自動產生== 運算子。下面的範例示範了這一點:

struct X {
    int Dummy = 0;
    auto operator<=>(const X&amp;) const = default;
};

int main() {
    X a, b;

    a == b; // OK!
}
登入後複製

自訂實作和非產生的相等運算子

但是,當提供spaceship 運算子的自訂實作時,產生的相等運算子不再可用。這是在問題內容中觀察到的,其中自訂運算子 使用 == 運算子時,實作導致錯誤。

行為背後的原因

此行為是故意的。 C 標準指定只有預設的飛船運算子才會觸發相等運算子的產生 ([class.compare.default](https://eel.is/c Draft/class.compare.default))。基本原理是某些類,例如 std::vector,可能不想使用飛船運算子進行相等性檢查,因為它可能不是最有效的方法。

結論

因此,在定義自訂太空船運算子時,請務必記住它消除了相等運算子的自動產生。如果需要相等性檢查,建議為 == 運算子提供明確定義。

以上是使用自訂太空船運算子是否會阻止 C 中相等運算子的生成?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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