複製賦值運算子:傳回引用與值
在C 中,複製賦值運算子通常不會傳回新物件的副本,而是相反,回傳一個引用或一個const 引用。為什麼這是首選方法?
透過引用回傳的基本原理
首先,透過引用回傳可以最大限度地減少與賦值相關的計算開銷。它只需將值從一個對象複製到另一個對象,避免創建和銷毀臨時對象。在處理複雜或大型物件時,這尤其有用,因為建構和刪除副本可能會佔用大量資源。
按值返回的後果
另一方面,如果複製賦值運算子按值返回,它會為每個值觸發以下序列賦值:
對於鏈中的每個賦值,都會重複此序列,導致過多的建構子和析構函式呼叫。考慮以下場景:
如果operator=按值返回,則需要兩次構造函數和析構函數呼叫來對a2和a3進行賦值,而按引用返回則避免了這種開銷。
其他注意事項
透過引用傳回也允許賦值運算子傳回左值,允許進一步修改指定的物件。相反,按值返回會產生右值,無法直接修改該右值。
結論
雖然按引用返回是C 中複製賦值運算符的標準做法,在決定合適的返回類型時,權衡具體的上下文和要求非常重要。然而,對於大多數涉及效率和物件管理的場景,返回引用仍然是首選。
以上是為什麼 C 複製賦值運算子通常會傳回引用而不是值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!