戻り値のタイプがoperator+=
のオペレータオーバーロードについては、インターネットでいくつか例を見てきましたが、T&
です。 +=
をT a = b = c;
のようにチェーン化できないので、戻り値の型をvoid
として宣言しても問題ありません。 void
を使用すると、すべて正常に動作するようです。私たちはそれを避けなければならない状況はありますか? EXのためにreturn type of operator + =オーバーロード中
:
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