在C 中,編譯器自動提供某些操作的預設實現,包括建構函數、賦值運算子、和析構函數。但是,它不會產生預設的相等 (==) 和不等 (!=) 運算子。
排除的原因
不提供預設相等運算符的決定源自於與成員之間的比較相關的潛在問題。如果類別處理記憶體分配或包含複雜的資料結構,預設比較可能會導致意外結果或錯誤行為。
Stroustrup 的觀點
C 語言創建者 Bjarne Stroustrup ,表達了對自動預設複製建構函數的擔憂。他認為複製應該由程式設計師明確控制,並且他不鼓勵將其用於特定物件類型。
程式設計師的後果
編譯器產生的相等運算子的缺失意味著程式設計師必須為其類別編寫自訂比較函數。此額外責任可確保正確比較複雜的類,而不會影響資料完整性。
範例
考慮以下類別:
class Foo { public: std::string str_; int n_; };
進行比較此類的對象,程式設計師必須實現相等性運算子:
bool operator==(const Foo& f1, const Foo& f2) { return (f1.str_ == f2.str_ && f1.n_ == f2.n_); }
結論
C編譯器不會自動定義相等和不等運算子來防止潛在錯誤並保持對物件比較的控制。程式設計師必須為複雜的類別定義自訂比較函數,以確保類別實例的比較準確可靠。
以上是為什麼 C 編譯器不自動產生相等 (==) 和不等 (!=) 運算子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!