4

C++ で演算子のオーバーロードを学習しています。元のサフィックス ++ は、代入演算子よりも優先順位が低いという特性があります。たとえば、int i=0, j=0; i=j++; cout<<i<<j01 が出力されます。しかし、このプロパティは、後置 ++ をオーバーロードすると失われるようです。

#include<iostream>
using namespace std;

class V
{
public:
    int vec[2];
    V(int a0, int a1)
    {
        vec[0]=a0;vec[1]=a1;
    }
    V operator++(int dummy)
    {
        for(int i=0; i<2; i++)
        {
            ++vec[i];
        }
        V v(vec[0],vec[1]);
        return v;
    }
    V operator=(V other)
    {
        vec[0]=other.vec[0];
        vec[1]=other.vec[1];
        return *this;
    }
    void print()
    {
        cout << "(" << vec[0] << ", " << vec[1] << ")" << endl;
    }
};

int main(void)
{
    V v1(0,0), v2(1,1);
    v1.print();

    v1=v2++;
    v1.print();
}

(0,0)(1,1) を期待していたのに (0,0)(2,2) を出力します。

このような理由と、元のプロパティを復元する可能性を理解するのを手伝ってもらえますか?

4

2 に答える 2