C 中的Operator== 和Operator!=
雖然編譯器產生基本的類別成員,包括預設建構子、複製和移動建構函數,和賦值運算符,它省略了提供預設的比較運算符,例如運算符==和運算符!=.
省略背後的原因
與其他語言中逐個成員比較的預設行為不同,C 明確排除預設比較運算符,因為潛在的隱藏複雜。該決定源於 Bjarne Stroustrup 的擔憂,即有關物件語義的不受控製或隱式假設可能會導致意外結果。
開發人員的後果
開發人員必須手動實作運算子 == 和運算子! =。這對於保存記憶體的類別尤其重要,因為確定相等性將涉及比較整個物件而不僅僅是成員值。
編譯器限制
儘管能夠產生預設的複製構造函數,編譯器無法有效地執行逐個成員的比較。這是因為operator==和operator!=需要比較複雜的對象,而這些物件不能只可靠地從成員值衍生出來。
推薦實踐
為了避免意外後果,避免依賴使用operator==和operator!=的隱式物件相等性檢查。考慮到類別的具體要求,始終明確地實作這些運算符。
以上是為什麼 C 不自動產生 `operator==` 和 `operator!=`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!