太空船運算子及其對等式運算子的影響
太空船運算子,在C 20中引入,提供了一個簡潔的三向比較的語法。但是,在使用太空船運算符和相等運算符(== 和 !=)時遇到意外行為的使用者可能會感到驚訝。
預設實作和產生的相等運算子
當spaceship 運算子被宣告為預設值時(例如,auto operator(const X&) const = default;),它使編譯器能夠根據底層比較自動產生== 運算子。下面的範例示範了這一點:
struct X { int Dummy = 0; auto operator<=>(const X&) 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中文網其他相關文章!