2016-06-09 77 views
0

回報,我很困惑通過下面的例子:困惑參照

class complex { 
    double re, im; 
public: 
    complex(double r, double i) : re{r}, im{I}() 

    complex& operator+= (const complex&z) { re += z.re; im += z.im; return *this; } 
}; 

我不明白,爲什麼從operator +=返回類型爲參照,因爲reim都得到更新。我也不明白爲什麼包含*this

+0

我不明白爲什麼你認爲're'和'im'得到更新有什麼做的返回類型。 'return * this;'是因爲'* this'是函數返回引用的對象。 – molbdnilo

回答

0

第一條:

您的運營商+ =未正確申報。它應該是

complex& operator+=(complex const& other){...} 

二來回答您的實際問題,你是返回*這是因爲+ =運算符是被分配到正在修改變量的內部狀態的複合賦值操作符。所以你返回一個對「this」指向的變量的引用。

+0

該代碼直接從Bjarne Stroustrup(C++的創建者) –

+0

不正確的書C++編程語言?我們可以知道爲什麼? const T&和T const&是一樣的嗎? – Yves

+0

對此問題的編輯修復了此答案發布後的聲明。 –

1

這可能也返回void

C++約定是operator+=返回對其左手操作數的引用,以便您可以編寫一個表達式,如if((x += y) > 10)

+0

能否請你解釋爲什麼有必要返回IF((X + = Y參考)> 10嗎?對不起,我只是新來的所有這一點。 –

+0

@MichaelHutton如果返回的'void',那麼你可以使用'+ ='做加和更新值。因爲它返回'void',你可以做罷了。如果返回的參考*這個,你可以立即使用這個值,比如a + = b = c,或者(a + = b)> c等等,它們表示a = a + b; a = c; a = a + b; a> c。 – Yves

+0

啊,現在我明白了!謝謝你的信息 –

1

按照慣例,我們嘗試operator類作品爲內置。

int i = 0; 
(i += 40) += 2; 

是有效的。

因此,通過參考返回允許上課。