2013-01-09 123 views
2

當我在函數中返回指向引用類型的指針時,出現編譯器錯誤initial value of reference to non-const must be an lvalue。該功能是這樣返回指向參考的指針

Testing& copy(Testing test) 
{ 
    x = test.x; 
    return this; 
} 

但是,當我改變this*this,該錯誤消失。

+2

引用不能有指針,但指針*可以*有引用。如果你想返回一個指向你的對象的指針,返回'this'。如果你想返回對象的引用,返回'* this'。 – WhozCraig

+0

你的問題是什麼? 'this'是指針,'* this'是一個引用,如果你返回一個引用,你的函數將被編譯。毫無疑問。 –

+0

@WhozCraig你能否詳細說明,我絕對不會看到你的意思。 –

回答

1

指針和引用不是一回事。 this指針到當前類實例,而*this是作爲一個值的實際實例(更具體地說,左值用作返回值)。

3

在C++中,this特殊變量將指針保存到類實例。

您正在創建一個函數,該函數將一個引用返回給一個實例,另一個名稱爲相同的內存位置。

當您使用*this時,您將取消引用this指針,獲取保存當前實例的實際內存位置並返回一個別名。

它確實有效!如果您需要多態性,請謹防Object Slicing Problem

+1

切片僅適用於按值返回/分配。 – Angew