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

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

2013-07-08 
求教:局部变量的生存周期问题int& func(int a){return a} int main(){int bb func(5)}本来 a是函数fu

求教:局部变量的生存周期问题
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在函数结束时已经被释放,里面的值可能变化,也可能不变化,你的代码因为结构非常简单所以可能结果是正常的,但如果换成容器之类的就肯定不会有正确的结果了

热点排行