gpt4 book ai didi

c++ - 运算符= : return reference vs. 值

转载 作者:行者123 更新时间:2023-11-30 01:58:00 25 4
gpt4 key购买 nike

我正在浏览 this我有点困惑。假设我将一个类声明为:

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

两个地址组相同;这被理解为赋值运算符通过引用返回。

但我注意到,如果我将赋值运算符定义为按值返回,则会返回相同的地址组值。

在上面提到的链接中,回答如果按值返回,将返回对象的拷贝。那为什么它返回相同的地址值。他们不应该是不同的吗?请帮助理清我的概念。

最佳答案

返回值只有在您对它进行操作时才有意义。例如:

(o1 = o2).do_something();

或等效地:

(o1.operator=(o2)).do_something();

do_something() 方法将在返回的对象上运行 - 在您的例子中是 o1 的原始实例,因为它正在返回一个引用。但是,如果您将代码改为返回一个值,则 do_something() 将在 o1< 的拷贝 上运行.

如果您有第三个对象 cls* o_ptr; 并执行以下操作:

cls o1 = 7;
cls o2 = cls(8);
cls* o_ptr = &(o1=o2);

如果您显示 o_ptr,如果您返回一个引用,您会发现它与 &o1 相同,但如果您返回一个值,则不同。

关于c++ - 运算符= : return reference vs. 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17955121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com