我已經在因特網上經歷了一些運營商超載的例子,其中返回類型operator+=
是T&
。由於我們無法鏈接+=
,例如T a = b = c;
,可以將返回類型聲明爲void
。使用void
時,一切看起來都正常。有什麼情況需要避免嗎?運營商的返回類型+ =超載
對於前:
class MyInteger{
private:
int x;
public:
MyInteger(const int& a):x(a){}
void operator+=(const MyInteger& rhs){
x += rhs.x;
}
};
MyInteger a(10);
a += a; //No need to return anything because we can't chain
a = a + (a += a);
「既然我們不能連鎖'+ ='」?爲什麼不? '(((a + = b)+ = c)+ = d)'或'a + =(b + =(c + = d)))''。它像以往一樣可以鏈接。 – AnT
@AnT好的,但我們不需要返回任何東西。因爲這些更改是在LHS中進行的,並且可用於下一個操作。所以不需要'T&'作爲回報。 –
但是,如果你想鏈接它,你*有*返回的東西。 – AnT