為什麼複製賦值運算子需要回傳引用/常數引用?
在 C 中,複製賦值運算子通常會傳回引用或對其自身的 const 引用。這種設計選擇源於性能考慮,並避免不必要的複製。
考慮以下範例:
A a1(param); A a2 = a1; A a3; a3 = a2;
假設複製賦值運算子operator=傳回新物件的副本。在這種情況下,每個賦值操作都會觸發臨時副本的建立以及賦值後該副本的後續銷毀。
A a3 = a2; // Creates a temporary copy of a2
但是,透過回傳引用或 const 引用,賦值運算就變成了效率更高。資料直接從一個物件複製到另一個對象,無需建立和銷毀臨時副本。
A& operator=(const A& a) { /* ... */ } a3 = a2; // Copies data directly from a2 without creating a temporary copy
返回引用或 const 引用也確保操作符可以被連結。在上面的範例中,語句 a = b = c 可以正確運作,因為賦值運算子傳回對呼叫物件的參考。
相反,如果運算子傳回副本,則無法進行連結。語句 a = b = c 會產生編譯錯誤,因為將 c 指派給 a 需要一個副本,而將 b 指派給 a 已經建立了一個副本。
因此,傳回引用或 const來自複製賦值運算子的引用對於效能和多個賦值的正確連結至關重要。
以上是為什麼 C 複製賦值運算子回傳引用(或常數引用)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!