求教:局部变量的生存周期问题
int& func(int a)
{
return a;
}
int main()
{
int b;
b = func(5);
}
本来 a是函数func的局部变量,在func执行完时释放,但是返回值是对a的引用 是不是意味着 a不是在函数执行完后释放 而是在b = func(5)之后释放
[解决办法]
不是
这意味着你写了一段错误的代码
a是局部变量生存期离开那个语句块 生存期就结束了
你返回一个无效的引用
错误的做法
[解决办法]
返回值确实是 a 的地址.
只是这个地址已经被编译回收了, 随时可能用来做其它事情.
你的情况是, 编译器还没来得急把它用于做其它事情, 你就把它的值取出来赋值给另外一个变量, 然后不使用它了. 虽然现在运行没什么问题, 但是返回一个会被编译回收的地址这种行为就是错误的.
[解决办法]