我正在阅读一些书,我决定为用户定义的类型编写自己的后增量运算符实现。这是代码。
#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;
行为是否未定义?
正如您的语法告诉您的那样,后缀运算符返回旧值的副本,因此它会增加,而不是您的对象。
基本上,
obj++ = obj2;
Run Code Online (Sandbox Code Playgroud)
会这样做:
X tempObj = obj;
obj ++;
tempObj = obj2;
Run Code Online (Sandbox Code Playgroud)
您正在分配obj2给一个临时变量。