返回信息流在类内重载操作符=时,格式如下:
A& operater=(constA& a){
//赋值操作
return*this;
}
这个返回值是A和A&有什么区别吗?如果是A的话不是也没生成新对象吗?
这是一条镜像帖。来源:北邮人论坛 / cpp / #45838同步于 2010/11/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
跟风问个引用的问题
yangshi980
2010/11/8镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
返回A,是传值啊,有拷贝的过程。
【 在 yangshi980 (ys) 的大作中提到: 】
: 在类内重载操作符=时,格式如下:
: A& operater=(constA& a){
: //赋值操作
: ...................
#include <iostream>
using namespace std;
class A{
int i;
public:
A():i(0)
{
cout << "A::A()" << endl;
}
A(const A&a)
{
cout << "A::A(const A&a)" << endl;
}
A& operator=(const A&a) //换成返回 A 再试试。
{
i = a.i;
cout << "A::operator=" << endl;
return *this;
}
};
int main()
{
A a1, a2, a3;
a1 = a2 = a3;
return 0;
}
【 在 yangshi980 (ys) 的大作中提到: 】
: 在类内重载操作符=时,格式如下:
: A& operater=(constA& a){
: //赋值操作
: ...................
返回A的话,在进程的main函数栈空间,会临时开辟一段空间,在A operator=(const A&a) 函数返回时 ,main函数的栈空间会临时保存 *this 指向的类对象的拷贝。 但是如果是在A& operator=(const A&a) 函数返回时 ,在main函数栈空间只需要保存 *this 指向的类对象的地址即可。所以说如果返回值是A的话会生成新的对象,但是 返回值是A& 的话,只需要返回一个地址即可。 不知道我说的对不对。轻拍
我觉得这个完全可以不返回值…因为你改的本来就是this的值,我不明白为啥还要返回一个引用类型给谁,我试过即使你不返回东西,被赋值的实体的值也改了
thanks
【 在 baimushan 的大作中提到: 】
: 返回A的话,在进程的main函数栈空间,会临时开辟一段空间,在A operator=(const A&a) 函数返回时 ,main函数的栈空间会临时保存 *this 指向的类对象的拷贝。 但是如果是在A& operator=(const A&a) 函数返回时 ,在main函数栈空间只需要保存 *this 指向的类对象的地址即可。所以说如果返回值是A的话会生成新的对象,但是 返回值是A& 的话,只需要返回一个地址即可。 不知道我说的对不对。轻拍
: --