2014-01-26 73 views
-1

爲什麼按操作員鏈接的參考返回?通過參考和操作員鏈接返回

我看過很多關於SO的答案,股票短語是「通過引用返回以允許操作符鏈接」,但是沒有解釋,我不明白爲什麼我不能以其他方式做到這一點。

例如,這似乎編譯我的系統上正常工作,而鏈接的作品:

TestClass operator+=(TestClass tc){ 
    somePrivateValue += tc.somePrivateValue; 
    return *this; 
} 

在哪裏我也可以這樣做:

TestClass& operator+=(TestClass& tc){ 
    somePrivateValue += tc.somePrivateValue; 
    return *this; 
} 

剔除的事實,第二個例子不需要爲TestClass調用複製構造函數還有哪些其他優點?

+0

第一個編譯,但它真的做你想做的? – user2079303

回答

2

和鏈接的作品

不,不。

TestClass a = some_value; 
TestClass b = some_other_value; 
(a += b) += b; 

現在檢查的a價值,但這樣做了。它是否反映了兩次增加b?還是隻有一次?

+0

非常正確。我只看着'a + = b + = c'的情況,而不是像上面這樣的括號內的情況,它會改變評估的順序。現在清理:)謝謝。 –