首頁 > 後端開發 > C++ > 為什麼 C 複製賦值運算子返回引用而不是副本?

為什麼 C 複製賦值運算子返回引用而不是副本?

Linda Hamilton
發布: 2024-12-21 04:15:09
原創
449 人瀏覽過

Why Do C   Copy Assignment Operators Return References Instead of Copies?

複製賦值運算子中引用/常數引用回傳的必要性

C 中的複製賦值運算子引發了有關其回傳類型運算子引發了有關其回傳類型的問題。為什麼它回傳一個引用或一個常數引用而不是新物件的副本?為了闡明這個概念,請考慮以下場景:

A a1(param);
A a2 = a1;
A a3;

a3 = a2; // The problematic line
登入後複製

假設複製賦值運算子定義如下:

A A::operator=(const A& a)
{
    if (this == &a)
    {
        return *this;
    }
    param = a.param;
    return *this;
}
登入後複製

從複製賦值運算子傳回引用具有顯著的優點關於歸還副本。透過傳回引用,它可以完成最少的工作,因為它僅將值從一個物件複製到另一個物件。

但是,按值回傳會產生額外的開銷。每次呼叫賦值運算子時,都會呼叫建構函數和析構函數,導致不必要的資源消耗。例如:

A& operator=(const A& rhs) { /* ... */ };

a = b = c; // Calls assignment operator twice. Efficient.
登入後複製

相反:

A operator=(const A& rhs) { /* ... */ };

a = b = c; // Calls assignment operator twice, calls copy constructor twice, calls destructor twice for temporary values. Inefficient.
登入後複製

因此,從複製賦值運算子返回引用或const 引用可以透過避免不必要的物件建立和銷毀來優化效能,從而提高效率和程式碼可維護性。

以上是為什麼 C 複製賦值運算子返回引用而不是副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板