我正在創建一個使用+ =操作的對象。是否應該超載返回參考*this
或應該只是返回*this
?在C++中重載擴展賦值(返回類型)
2
A
回答
3
http://en.cppreference.com/w/cpp/language/operators
那裏你可以找到典型實現。
class X
{
public:
X& operator+=(const X& rhs) // compound assignment (does not need to be a member,
{ // but often is, to modify the private members)
/* addition of rhs to *this takes place here */
return *this; // return the result by reference
}
// friends defined inside class body are inline and are hidden from non-ADL lookup
friend X operator+(X lhs, // passing lhs by value helps optimize chained a+b+c
const X& rhs) // otherwise, both parameters may be const references
{
lhs += rhs; // reuse compound assignment
return lhs; // return the result by value (uses move constructor)
}
};
2
假設foo
和bar
是Foo
實例。
如果+=
沒有返回一個引用,則表達式
foo += bar += bar
將語法無效這將是一個背離內置類型(雖然這是有趣的是,內置類型的這種表達式的行爲未定義,因爲+=
不是這種類型的排序點)。
未返回引用也可能導致Foo
的複製構造函數更多的使用。
快速回答:返回非const
參考。
相關問題
- 1. 類返回類型重載
- 2. 返回類型重載?
- 3. 通過類擴展和返回值
- 4. C#引用類型賦值VS值類型賦值
- 5. C++移動賦值運算符返回類型
- 6. mysql_row從不兼容的指針類型返回賦值?用C
- 7. 返回擴展分類
- 8. 擴展Zend_Db_Table_Row_Abstract不返回值
- 9. 如何在C++中獲取返回類型的重載方法?
- 10. C# - 重載擴展方法
- 11. 包裝類中的賦值運算符的返回類型?
- 12. C#類型擴展接口
- 13. 賦值運算符重載:void返回回訪參考參數
- 14. 獲取C++中返回值的類型
- 15. C++/CLI:只能在返回類型上重載嗎?
- 16. 擴展擴展類型
- 17. 返回需要超類的擴展類
- 18. 賦值中的不兼容類型 - C
- 19. 按返回類型重載函數
- 20. Java泛型擴展返回類型的方法
- 21. 重寫屬性返回類型,C#
- 22. 賦值函數返回值
- 23. 重載賦值運算符以返回std :: vector
- 24. 重載賦值運算符而沒有返回語句
- 25. C++重載賦值運算符
- 26. 重載C++賦值運算符
- 27. C++ BigInteger和賦值操作符重載
- 28. 重載賦值運算符C++
- 29. C++類擴展
- 30. 擴展函數不能返回空值
我不明白問題 –
@bath我正要把這個問題作爲同一個問題的重複來解決。我看到你重新打開了它。你不同意這是重複的嗎?你準備發佈一個史詩般的答案? –
由於擬議副本對於這樣一個尖銳的問題來說過於寬泛,因此我重新開放。 – Bathsheba