我正在創建一個使用+ =操作的對象。是否應該超載返回參考*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. 如何擴展在C#中返回泛型值的泛型類?
- 2. 擴展返回父類型
- 3. 賦值運算符返回值類型
- 4. 類返回類型重載
- 5. 擴展方法,返回接口類型
- 6. 重載返回類型?
- 7. 返回類型重載?
- 8. MyBatis和泛型:返回類型ArrayList <?擴展MyClass的>返回空值
- 9. 通過類擴展和返回值
- 10. C++模板賦值運算符重載 - 將基元類型賦值給對象?
- 11. 在C++中重載賦值運算符
- 12. ViewBag在擴展類中返回null
- 13. C#引用類型賦值VS值類型賦值
- 14. mysql_row從不兼容的指針類型返回賦值?用C
- 15. C++移動賦值運算符返回類型
- 16. 返回擴展分類
- 17. 如何在C++中獲取返回類型的重載方法?
- 18. 擴展Zend_Db_Table_Row_Abstract不返回值
- 19. 返回類型的重載運算符[]返回類型
- 20. C#EmptyIfNull擴展任何IEnumerable返回空派生類型
- 21. C# - 重載擴展方法
- 22. 在賦值語句中獲取返回類型
- 23. 包裝類中的賦值運算符的返回類型?
- 24. 在C++中複製Haskell的返回類型重載(通過類型特定)
- 25. C#類型擴展接口
- 26. C++ - 擴展數據類型
- 27. 擴展C宏的類型
- 28. 客觀的C類擴展。無法爲讀取屬性賦值
- 29. 獲取C++中返回值的類型
- 30. 賦值運算符重載:void返回回訪參考參數
我不明白問題 –
@bath我正要把這個問題作爲同一個問題的重複來解決。我看到你重新打開了它。你不同意這是重複的嗎?你準備發佈一個史詩般的答案? –
由於擬議副本對於這樣一個尖銳的問題來說過於寬泛,因此我重新開放。 – Bathsheba