讨论:C++中函数不能返回局部变量的引用,你是怎么理解的?
C++ Primer中 214页中说千万不要返回局部变量的引用,然后有下面的示例:
const string &mainp(const string &s)
{
string ret=s;
return ret
}
//这个函数在运行的时候会出错,因为它返回了局部变量的引用。
我有点不明白 return ret 分明是返回的局部变量嘛 怎么会是返回局部变量的引用呢?
书上说不能返回局部变量的应用是因为函数在执行完后,系统就释放了局部变量的存储空间。有一点不太明白:函数执行完不就是执行完return语句才叫做执行完吗?那么执行return语句的时候函数还没有执行完。那么局部变量也就没有被释放 那应该还是可以引用的吧。
要是我哪里理解错了的话,请看下面的例子:
#include<iostream>
using namespace std;
int &ref()
{
int ivar=1100; //局部变量
int &irvar=ivar;
return irvar; // 返回了局部变量的引用
}
int main(int argc,char *argv[])
{
cout<<ref();
}
我编译后是可以正确运行的。
请大家解惑:
[解决办法]
http://topic.csdn.net/t/20060824/09/4971592.html
参考10楼
[解决办法]
因为局部变量或者局部指针所指的内容(在函数内部,用静态方式分配的内存)在函数返回后,就失效了。
以局部指针为例,局部指针本身是能够正常的返回给调用者的,但是局部指针所指向的内容在函数返回后就没有意义了,也就是说调用所得到的指针,它所指向的内容是没有意义的东西。
可以参考:
关于函数返回值的几种情况
[解决办法]
Google了一下英文网站,有人对此的解释是“操作系统还没有立刻将本地变量的内存分配给其他变量,但这是暂时的、不稳定的。”