C++ 用户定义类型的增量后运算符';行为
我正在阅读一些书,决定为用户定义的类型编写自己的后增量运算符实现。这是代码C++ 用户定义类型的增量后运算符';行为,c++,g++,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; } i
#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;
}
#包括
使用名称空间std;
X类
{
INTA;
公众:
X(intx=1):a(X){}
X运算符++(int)
{
X oldobj=*这个;
(*此).a++;
返回oldobj;
}
int get(){返回一个;}
};
int main()
{
X obj,obj2;
obj++=obj2;
cout正如语法所告诉的,后缀运算符返回旧值的副本,因此递增的是旧值,而不是对象
基本上
obj++ = obj2;
我们将这样做:
X tempObj = obj;
obj ++;
tempObj = obj2;
您正在将obj2
赋值给一个临时变量。该行为实际上是定义良好的
您正在为obj++
的结果赋值,该结果是一个临时值,是post increment之前的obj
的副本。此赋值不影响obj
,后者保留其增量值2
代码大致相当于:
X temp = obj;
obj++;
temp = obj2;
obj++
返回保存旧值的临时对象
因此,虽然“obj2
的值在增量完成后将被复制”是真的,但它根本没有复制到原始的obj
)(*这)。a++
通常被写成这->a++
(或者只是a++
)