[英]Overloading copy assignment operator in c++
我對重載的復制賦值運算符有疑問。 我在許多書籍/網站中讀到,重載復制賦值運算符的簽名如下所示:
類型 &Type::operator=(const 類型 &rhs)
但是,我不明白為什么我們需要通過引用返回它,實際上不返回沒有意義嗎? 我的意思是當我們通過引用或值返回它時,返回值在哪里返回,因為另一個 object 已經在重載的復制分配運算符中分配了例如。 如果我的主要 function 中有這樣的東西:
int main(){
Type a {<Some lieral value>}; //Initialise object a with some literal
Type b {<Some literal value>};
b=a; //Object b is already assigned when we call overloaded copy operator, which variable accepts the return value?
}
注意:這本書/網站說了一些關於鏈分配的內容,但是我不明白當我們遇到上述情況時值將返回到哪里。
Type b = a;
不是賦值。 Is 是一個帶初始化的變量定義,並導致Type
的復制構造函數a
as 參數調用。 構造函數沒有返回值,正如您正確指出的那樣, Type b = a
具有任何結果值是沒有意義的,因為它甚至不是表達式。
然而
b = a;
(與先前Type B;
)是分配。 賦值是一個表達式,所以它有一個可以在其他表達式中使用的結果值。 例如以下是有效的:
int a = 0;
(a = 2) += 1;
並將a
設置為3
。 這里對於int
等基本類型,賦值返回對賦值左側的引用。
對於 class 類型,這是通過讓復制賦值運算符也返回對賦值左側的引用(即*this
)來模仿的。
一個典型的用例是分配給多個實例:
Type a, b, c;
// Do something with c
a = b = c;
在最后一行之后,所有三個a
, b
和c
將在相同的 state 中, c
在更改分配之前,因為a = (b = c);
表達式被解析為右側賦值返回對b
的引用,該引用用於在將c
分配給b
之后分配給a
。
不需要從重載的賦值運算符返回對*this
的引用。 但是,這樣做是約定俗成的,因為它啟用了這個特定的用例。 如果您不返回對*this
的引用,您的 class 的用戶可能會在該習語突然不適用於您的 class 時感到驚訝,即使它可能不經常使用。
不需要使用從 function(或運算符)返回的值。 如果你寫
b = a;
返回的引用被簡單地丟棄。 它永遠不會存儲在任何地方,這根本不是問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.