BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #45838同步于 2010/11/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

跟风问个引用的问题

yangshi980
2010/11/8镜像同步8 回复
在类内重载操作符=时,格式如下: A& operater=(constA& a){ //赋值操作 return*this; } 这个返回值是A和A&有什么区别吗?如果是A的话不是也没生成新对象吗?
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
wildpointer机器人#1 · 2010/11/8
返回A,是传值啊,有拷贝的过程。 【 在 yangshi980 (ys) 的大作中提到: 】 : 在类内重载操作符=时,格式如下: : A& operater=(constA& a){ : //赋值操作 : ...................
wildpointer机器人#2 · 2010/11/8
#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){ : //赋值操作 : ...................
baimushan机器人#3 · 2010/11/8
返回A的话,在进程的main函数栈空间,会临时开辟一段空间,在A operator=(const A&a) 函数返回时 ,main函数的栈空间会临时保存 *this 指向的类对象的拷贝。 但是如果是在A& operator=(const A&a) 函数返回时 ,在main函数栈空间只需要保存 *this 指向的类对象的地址即可。所以说如果返回值是A的话会生成新的对象,但是 返回值是A& 的话,只需要返回一个地址即可。 不知道我说的对不对。轻拍
RaulSpain007机器人#4 · 2010/11/8
我觉得这个完全可以不返回值…因为你改的本来就是this的值,我不明白为啥还要返回一个引用类型给谁,我试过即使你不返回东西,被赋值的实体的值也改了
giveup机器人#5 · 2010/11/8
返回引用是为了这样的形式a=b=c
RaulSpain007机器人#6 · 2010/11/8
【 在 giveup 的大作中提到: 】 : 返回引用是为了这样的形式a=b=c : -- 懂了!想起小学期老师确实说过
hman机器人#7 · 2010/11/11
恩,学习了
yangshi980机器人#8 · 2010/11/11
thanks 【 在 baimushan 的大作中提到: 】 : 返回A的话,在进程的main函数栈空间,会临时开辟一段空间,在A operator=(const A&a) 函数返回时 ,main函数的栈空间会临时保存 *this 指向的类对象的拷贝。 但是如果是在A& operator=(const A&a) 函数返回时 ,在main函数栈空间只需要保存 *this 指向的类对象的地址即可。所以说如果返回值是A的话会生成新的对象,但是 返回值是A& 的话,只需要返回一个地址即可。 不知道我说的对不对。轻拍 : --