2013-03-08 119 views
14

我剛剛啓動C++。我對賦值和解引用操作符的返回類型有點困惑。我正在學習C++入門書。作者在不同的場合說過,賦值運算符的返回類型是指左手操作數的類型,但後來他說返回類型是左操作數的類型。我已經提到了C++ 11 Standard Sec。 5.17,其中返回類型被描述爲「左值指左手操作數」。什麼是返回類型的賦值運算符?

同樣,我不知道是否取消引用返回指向對象或引用對象。

這些陳述是否相同?如果是這樣,那麼怎麼樣?任何解釋將不勝感激。

+1

Plz大家注意。感謝所有的答覆,但我不是故意問關於操作員超載。我還沒有到那裏,我只是在問這個語言的內置操作。 – rahul1210 2013-03-08 11:53:57

回答

18

該標準正確定義了賦值運算符的返回類型。 實際上,賦值操作本身並不依賴於返回值 - 這就是爲什麼返回類型不直觀的理解。

返回類型對於鏈接操作很重要。 考慮以下構造:a = b = c;。這應該等於a = (b = c),即c應該被分配到bba。將其重寫爲a.operator=(b.operator=(c))。爲了讓a正確工作,b.operator=(c)的返回類型必須引用內部賦值結果(它也可以與拷貝一起使用,但這只是不必要的開銷)。

解除引用運算符的返回類型取決於你的內部邏輯,以適合你的需求的方式定義它。

+1

「該標準正確定義了賦值運算符的返回類型」 - 如何? – 2013-03-08 11:53:22

+7

@LuchianGrigore正如OP所引用的:* C++ 11 Standard Sec。 5。17,其中返回類型被描述爲「左值指左手操作數」。* – SomeWittyUsername 2013-03-08 11:58:26

+7

這最後的評論比整個答案更有用。 – 2016-03-07 12:43:16

5

它們都可以是任何東西,但通常operator =返回參照當前對象,即

A& A::operator = (...) 
{ 
    return *this; 
} 

是的,「參考類型左手操作數」和「左值指的是左手操作數「意味着同樣的事情。

解引用操作符基本上可以有任何返回類型。它主要依賴於程序的邏輯,因爲你重載了適用於對象的運算符,而不是指向對象的指針。通常情況下,這是用於智能指針,或迭代器和返回對象,他們環繞:

+0

您能否詳細說明「參考左手操作數的左值」,意思與「參考左手操作數的類型」相同。是參考一個左值? – rahul1210 2013-03-08 11:49:09

+0

@ user2148032是的,引用是一個左值。左邊的操作數是對象本身(因爲'x = y'有左邊的操作數'x')。 – 2013-03-08 11:51:23

+0

謝謝,我想我明白了 – rahul1210 2013-03-08 11:56:23

1

我也有類似的問題,但我想這將是最好使用

X& X::operator=(const X&); 

使用這樣,你將能夠在連鎖分配中重用該對象。

相關問題