关于引用变量存活问题

jyg8888 2004-12-07 05:16:34
(2004-12-07 16:57:18) -老毒物(261922851)
int & test()
{
int I_Base=500;
return(I_Base);
}
void main()
{
int &I_Temp=test();//我认为程序执行到这里,TEST函数体内的I_BASE就已经死亡 了,I_TEMP引用的是一个不确定的变量
cout<<"I_Temp="<<I_Temp<<endl;//那我执行应该输出了I_Temp=?????,而实际上输出了I_TEMP=500

}
=======================
想问问各位前辈,引用到底是用的什么机理?我是个喜欢了解事物本质的人,感觉书上引用只是个变量的别名的解释太简单了,能不能分析的深一些

...全文
138 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
podded 2004-12-08
  • 打赏
  • 举报
回复
你用的版本?
jyg8888 2004-12-07
  • 打赏
  • 举报
回复
难到我执行了第二次该&引用就死亡了吗
jyg8888 2004-12-07
  • 打赏
  • 举报
回复
虽然死亡了.但是地址里的东西却还没有被改写.而且地址是固定的..所以还是显示500;
((引用有个特殊功能,就是当一个临时对象绑定到引用,这个临时对象的生命期,将延长至这个引用的生命期结束时
指针却没有这个功能))引用 不知道上面一段引用说 的是否正确..
==================================
引用有个特殊功能,就是当一个临时对象绑定到引用,这个临时对象的生命期,将延长至这个引用的生命期结束时
===========
这句话怎么理解啊
我感觉好象不对
因为就我放的第一个TAST程序说
我曾经这样写过
int & test()
{
int I_Base=500;
return(I_Base);
}
void main()
{
int &I_Temp=test();
cout<<"I_Temp="<<I_Temp<<endl//这句正常输出I_Temp=500 cout<<"I_Temp="<<I_Temp<<endl//*注意这是我第二次执行*输出I_Temp=????不确定数字

}
==========
所以我就想问问前辈=引用的生命期结束=是什么时候
我感觉应该是整个程序生命周期都在啊

oyljerry 2004-12-07
  • 打赏
  • 举报
回复
返回局部变量的引用,就是dangling reference
whoho 2004-12-07
  • 打赏
  • 举报
回复
除了在形式上有点奇特之外,你可以认为引用的本质是T *const
也就是一个本身不可改变的指针(当然所指向的内容可以改变)

返回局部变量的引用,也就是返回一个指向一个临时对象的指针
最终产生的是悬挂调用
Cassati 2004-12-07
  • 打赏
  • 举报
回复
应该是在楼主说的那个时候就死亡了,至于什么时候删除它就要看系统了,我说的对不?

可以看看下面这个,也许能说明点什么问题

#include<iostream.h>
int & test()
{
int I_Base=500;
return(I_Base);
}
int & another_test()
{
int a=100;
return a;
}
void main()
{
int &I_Temp=test();
int &another_temp=another_test();
cout<<"another_temp="<<another_temp<<endl;
cout<<"I_Temp="<<I_Temp<<endl;
}
jalang 2004-12-07
  • 打赏
  • 举报
回复
虽然死亡了.但是地址里的东西却还没有被改写.而且地址是固定的..所以还是显示500;
((引用有个特殊功能,就是当一个临时对象绑定到引用,这个临时对象的生命期,将延长至这个引用的生命期结束时
指针却没有这个功能))引用 不知道上面一段引用说 的是否正确..
playmud 2004-12-07
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/2624/2624096.xml?temp=.1867334
Henry0 2004-12-07
  • 打赏
  • 举报
回复

int & test()
{
int I_Base=500;
return(I_Base);
}

int &I_Temp=test();

这里表示I_Temp代表的就是调用函数test()里的I_Base变量,当然,在函数外面,这个局部变量就过了其存活期,引用它会产生未定义的行为

64,673

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧