读书人

局部变量的生存周期有关问题

发布时间: 2013-07-08 14:13:00 作者: rapoo

求教:局部变量的生存周期问题
int& func(int a)
{
return a;
}
int main()
{
int b;
b = func(5);
}
本来 a是函数func的局部变量,在func执行完时释放,但是返回值是对a的引用 是不是意味着 a不是在函数执行完后释放 而是在b = func(5)之后释放
[解决办法]
不是
这意味着你写了一段错误的代码
a是局部变量生存期离开那个语句块 生存期就结束了
你返回一个无效的引用
错误的做法

[解决办法]
返回值确实是 a 的地址.
只是这个地址已经被编译回收了, 随时可能用来做其它事情.
你的情况是, 编译器还没来得急把它用于做其它事情, 你就把它的值取出来赋值给另外一个变量, 然后不使用它了. 虽然现在运行没什么问题, 但是返回一个会被编译回收的地址这种行为就是错误的.
[解决办法]

引用:
Quote: 引用:

不是
这意味着你写了一段错误的代码
a是局部变量生存期离开那个语句块 生存期就结束了
你返回一个无效的引用
错误的做法
也就是说 a 和返回值 占用的是两个不同的内存,只不过是用a来初始化返回变量对么
如果是值返回,a和返回值将是不同的内存,但这里是引用返回,所以返回的内容就是函数内a的地址的值,但是a在函数结束时已经被释放,里面的值可能变化,也可能不变化,你的代码因为结构非常简单所以可能结果是正常的,但如果换成容器之类的就肯定不会有正确的结果了

读书人网 >C++

热点推荐