次のコードがあります。
class Array
{
public:
int aaa;
Array():aaa(1){}
void print()
{
cout << aaa << endl;
}
Array& operator++()
{
aaa++;
return *this;
}
Array operator++(int)
{
Array a(*this);
aaa++;
return a;
}
};
次のような質問があります。
接頭辞が参照を返し、接尾辞がオブジェクトを返すのはなぜですか? 本 C++ Primer では、著者は "
For consistency with the built-in operators
" のみを説明しました。次に、コードをテストしました。
配列ar;
(ar++).print(); // print 1 ar.print(); // print 2
出力はまさに私が期待したものです。ここで、オーバーロードの後置関数のコードを次のように変更しました。
Array operator++(int)
{
Array a(*this);
a.aaa++; // changed this
return a;
}
テストコードを呼び出しました:
Array ar;
(ar++).print(); // this prints 2
ar.print(); // this prints 1
なぜ私はそのような結果を得たのですか?