首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++函数返回引用的有关问题

2012-02-26 
c++函数返回引用的问题问题1:函数int&back(int&i){intretireturnret:}可以正确返回所引用的实蚕参的值,

c++函数返回引用的问题
问题1:   函数       int   &back(int   &i)
                                  {    
                                        int   ret=i;
                                        return   ret:
                                    }
                    可以正确返回所引用的实蚕参的值,那么ret是不是从int转换成引用类型了?
问题2:       上面那个函数可以正确编译返回但是这个(c++primer   edition   4中的一个例子):
                                string   &back(string   &i)
                                    {    
                                          string   ret=i;
                                            return   ret;                              
                                      }
                      就是编译错误,reference   to   a   local   variable   or   object。
                      能不能   详细的解释一下这个例子,不明白为什么返回的是局部对象的引用!

[解决办法]

int ret=i;
这里ret是一个局部变量,在该函数结束的时候要 "消失 ",也就是出栈.当你返回它的引用时,它都不存在了,还引用什么?

string是一个类,
string ret=i;调用了拷贝构造函数,其他的道理也就和上面一样

总之,都是错误的
[解决办法]
局部变量的空间在函数调用就释放空间了

就不能返回引用了
[解决办法]
函数返回值(int Func1())时,要产生一个临时变量作为函数返回值的副本(保存该函数调用中要返回的值),而用引用返回值(int &Func2())时,不产生值的副本。故在用函数返回值定义一个引用(int &ia = Func1())时,该引用为临时变量的引用,由于临时变量作用域短暂,故该引用存在随时无效的危险。而用引用返回值时,由于不产生值的副本,故int &i = func2();在func2()的返回值是一个静态或者全局变量的情况下的调用是合法可行的,其直接用全局数据区中的变量来初始化引用y,当然如果Func2中的返回值是局部变量,那么当然是非法的。

不妨自己再分析一下下面的四种函数调用:
int Func1();
int &Func2();
int &i = Func2();
int &ia = Func1();
int ib = Func1();
int ic = Func2();
记得这好像是钱能的那本C++教程里面的题目,应该没有记错。

热点排行