C++返回引用类型

来源:百度知道 编辑:UC知道 时间:2024/05/17 02:52:17
刚学到C++引用返回类型这,对于值返回与引用返回,值返回回产生临时变量,引用返回不会,直接返回对该值的引用.有点混,我这样理解的不知道对不,请指教:
类似函数参数类型.按值传递和引用传递,临时变量就相当于形参,他是拷贝的实参的值.引用返回就相当于引用传递.形参是实参的别名,其内存空间是一样的.
例如:A a(){...;return *this;}和A& a(){...;return *this;}中的值返回,*this相当于"实参",要用的时候他会拷贝一份给"形参"就是所谓的临时变量.然后通过临时变量来操作,用完后临时变量的空间是要释放的.所以不能用值返回做左值.而引用返回返回了一个对*this的引用,他们是一个内存空间,对返回值的操作实际就是对*this的操作.由于空间不会暂时释放,他可以做左值.
请问,如果这种理解不正确请用类似的这种通俗点的讲法给我正确解释说明一下.
饿,左值问题是我临时加的,没有多加思索,也许有误,请集中在主要问题上啊,谢谢

对的,引用可以看成是指向固定地址的指针
A& a(){ return *this;} 就生成了一个固定地址的指针,并把指针带给你

但A a() { return *this;}会生成一个临时对象变量,并把这个临时变量给你
这样就多了一步操作

忘记在哪本书上看的了,说C++中没有高效率的对象返回,所以返回值
一定不要是一个直接的对象
除非是 return new A();,这种模式好象在vc++中专门做过优化的

是的,当返回一个变量时,会产生拷贝。当返回一个引用时,不会发生拷贝,你可以将引用看作是一个变量的别名,就是其他的名字,引用和被引用的变量其实是一个东西,只是有了两个名字而已。

问题的关键是,当你想要返回一个引用而不是一个拷贝时,你要确保这个引用的有效性,比如:
int & fun() { int a; a=10; return a; }
这样是不行的,因为a会在fun退出时被销毁,这时返回的a的引用是无效的。
这种情况下,如果fun的返回类型不是int & 而是int就没有问题了。

因此,要返回一个引用时,“临时变量”不能是“临时”的,至少得等函数外部使用完毕这个引用之后,才能销毁它。

A a(){...;return *this;}
会调用拷贝构造函数和析构函数
A& a(){...;return *this;}
不会调用拷贝构造函数和析构函数
应该都能够作为左值