我正在经历这个,有点困惑。假设我将一个类声明为:
class cls
{
public:
int x;
cls(int _x):x(_x){}
cls& operator=(cls& ob)
{
x = ob.x;
return *this;
}
};
然后创建 2 个对象并执行复制操作,然后打印赋值运算符重载前后两个变量的地址:
cls o1 = 7;
cls o2 = cls(8);
cout<<&o1<<endl; //0330F880
cout<<&o2<<endl; //0330F874
o1 = o2;
cout<<&o1<<endl; //0330F880
cout<<&o2<<endl; //0330F874
两者地址组相同;这被理解为赋值运算符通过引用返回。
但是我注意到,如果我将赋值运算符定义为按值返回,则会返回相同的地址组值。
在上面提到的链接中,回答是如果按值返回,将返回对象的副本。那为什么它返回相同的地址值。他们不应该是不同的。请帮助清除我的概念。