用户定义类型行为的后增量运算符

Ian*_*ath 2 c++ g++

我正在阅读一些书,我决定为用户定义的类型编写自己的后增量运算符实现。这是代码。

#include <iostream>

using namespace std;

class X
{
    int a;

    public:
    X(int x=1):a(x){}

    X operator++(int)
    {
        X oldobj = *this;
        (*this).a++;
        return oldobj;
    }

int get(){return a;}

};

int main()
{
    X obj,obj2;
    obj++ = obj2;
    cout<< obj.get() << endl;
    return 0;
}   
Run Code Online (Sandbox Code Playgroud)

我希望输出是1因为 obj2 的值将在增量完成后被复制。但输出是2.

想法?

PS 我知道这个代码不会赢得任何奖牌及其谬误。这只是为了我的理解。顺便说一句,++obj = obj2返回1

行为是否未定义?

Luc*_*ore 5

正如您的语法告诉您的那样,后缀运算符返回旧值的副本,因此它会增加,而不是您的对象。

基本上,

obj++ = obj2;
Run Code Online (Sandbox Code Playgroud)

会这样做:

X tempObj = obj;
obj ++;
tempObj = obj2;
Run Code Online (Sandbox Code Playgroud)

您正在分配obj2给一个临时变量。