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++教程里面的题目,应该没有记错。