次のコードを見てください。
#include <iostream>
using namespace std;
class Widet{
public:
Widet(int val = 0):value(val)
{
}
Widet& operator=(Widet &rhs)
{
value = rhs.value;
return *this;
}
int getValue()
{
return value;
}
private:
int value;
};
int main()
{
Widet obj1(1);
Widet obj2(2);
Widet obj3(0);
(obj3 = obj2) = obj1;
cout << "obj3 = " << obj3.getValue() << endl;
}
コードは正常に実行され、出力は(VS2008を使用して)次のようになります。
operator =に参照の代わりに値を返させると、次のようになります。
Widet operator=(Widet &rhs)
{
value = rhs.value;
return *this;
}
また、正常に実行され、出力は次のとおりです。
私の質問は:なぜ2番目のコードがうまく実行されるのですか?エラーが発生しないのですか?
*thisではなく*thisへの参照を返すのが良い習慣であるのはなぜですか?