C++返回引用类型

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

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

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

因此,要返回一个引用时,“临时变量”不能是“临时”的,至少得等函数外部使用完毕这个引用之后,才能销毁它。
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-08-08
对的,引用可以看成是指向固定地址的指针
A& a(){ return *this;} 就生成了一个固定地址的指针,并把指针带给你

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

忘记在哪本书上看的了,说C++中没有高效率的对象返回,所以返回值
一定不要是一个直接的对象
除非是 return new A();,这种模式好象在vc++中专门做过优化的本回答被提问者采纳
第2个回答  2007-08-08
A a(){...;return *this;}
会调用拷贝构造函数和析构函数
A& a(){...;return *this;}
不会调用拷贝构造函数和析构函数
应该都能够作为左值

c++函数的返回值类型---引用&非引用
c++函数返回值类型:引用与非引用的区别在c++中,函数的返回值类型有明显区分,主要分为返回非引用类型和返回引用类型。两种方式在处理数据时有着显著的不同。1. 返回非引用类型 当你调用一个函数并期望函数返回一个新的对象或值时,它通常会返回非引用。这种方式下,函数创建了一个新的对象并将其值返...

C++返回引用类型
是的,当返回一个变量时,会产生拷贝。当返回一个引用时,不会发生拷贝,你可以将引用看作是一个变量的别名,就是其他的名字,引用和被引用的变量其实是一个东西,只是有了两个名字而已。问题的关键是,当你想要返回一个引用而不是一个拷贝时,你要确保这个引用的有效性,比如:int & fun() { in...

c++中函数名字前有&是什么意思?
&的意思是返回引用类型。格式:类型标识符 &函数名(形参列表及类型说明){ \/\/函数体}。在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error。

关于c++在返回类型中用&
&在C++还有一个比较重要的用法,就是“引用”!你写的语句的意思是以引用去接收该函数的返回值,并非地址哦,*this就是一个对象,即以引用去接收该对象,这与普通的返回不同的是普通直接返回时,要创建返回值的一个副本,而直接返回引用不创建,提高了效率。

c++返回引用类型的问题 引用作为返回类型是什么意思啊?
返回类型为引用,就是返回的值可以作为左值。可以对他进行赋值的意思

C++函数返回引用问题
C++为“引用“赋于了新的内涵:当函数的形式参数使用“引用类型”时,函数内对“引用”的操作可以改变原变量的值,而用变量类型作形式参数时是拷贝传值,没有这种优势。返回”引用“的函数在函数名前加一个&,再前面是类型名,比如int &index()是返回一个int型“引用”,因为“引用”是int型某变量...

c++返回引用问题
1可以不初始化,默认为0 2while(x) 当x=0时退出循环,当x不为0时表达式都为真,继续循环 3 返回引用是为了让a或者b自加,返回值自加没有意义,参数表里也可以用引用,只是不需要用而已

c++ 函数返回引用问题
由于静态变量的声明周期直到程序结束,所以返回静态变量的引用是有意义的,而且安全的。下面解释返回静态变量的引用的情形:include <iostream>using namespace std;int& f(){ static int b = 40; return b;}int main(){ int& e = f();\/\/ e为b的别名 int e2 = f();\/\/ e2为...

c++中为什么有时候函数返回类型前要加&
加&是返回一个变量的引用。一般是在重载运算符的时候用的多,或者返回类对象的时候。举个例子,重载运算符[],1.如果没有&,那就是返回值,不能对返回值a[n]进行赋值操作;2.如果有&,那返回了一个引用,可以对返回值a[n]进行赋值操作。

C++“函数的返回值”怎么返回,或者是返回到哪里?
返回到调用函数处。相当于中断机制。int fun(){...} 调用函数 int a;a=fun();返回值保存到a变量中了。

相似回答