返回局部变量的引用?

butterflygogogo 2010-05-08 03:59:42
int& func()
{
int a = 10;
return a;
}
返回局部变量的引用会出问题的 但是在主函数中调用这个函数 可以正常显示 为什么?
...全文
109 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
liutengfeigo 2010-05-08
  • 打赏
  • 举报
回复
别那样写,危险
zenny_chen 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhangjian33446 的回复:]
小弟还有一个问题 static修饰的局部变量 不论函数被调用多少次 都只开辟一个静态空间?
[/Quote]
是的。并且是在加载时或运行时初始化期间被初始化。
zhiliangyu86 2010-05-08
  • 打赏
  • 举报
回复
int& func()
{
int a = 10;
return a;
}
返回局部变量的引用会出问题的 但是在主函数中调用这个函数 可以正常显示 为什么?

程序中怎么多了个 int&
heis07w 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhangjian33446 的回复:]

小弟还有一个问题 static修饰的局部变量 不论函数被调用多少次 都只开辟一个静态空间?
[/Quote]
static修饰的变量不在进程栈区上,而在data区
zenny_chen 2010-05-08
  • 打赏
  • 举报
回复
呵呵,楼主可以试试以下代码:

int& func()
{
int a = 10;
return a;
}

int main(void)
{
int& ret = func();
cout << "The reference address is: " << &ret << endl;
cout << "The value is: " << ret << endl;
}

黑娃 2010-05-08
  • 打赏
  • 举报
回复
要是你的a不是内置类型的话就不会有这么好的运气了
skyworth98 2010-05-08
  • 打赏
  • 举报
回复
不过像这么干基本上是自找麻烦

[Quote=引用 9 楼 skyworth98 的回复:]
如果是调用后直接输出,基本上应该是正确的,这个跟编译器的实现有关


引用楼主 zhangjian33446 的回复:
int&amp; func()
{
int a = 10;
return a;
}
返回局部变量的引用会出问题的 但是在主函数中调用这个函数 可以正常显示 为什么?
[/Quote]
skyworth98 2010-05-08
  • 打赏
  • 举报
回复
如果是调用后直接输出,基本上应该是正确的,这个跟编译器的实现有关

[Quote=引用楼主 zhangjian33446 的回复:]
int& func()
{
int a = 10;
return a;
}
返回局部变量的引用会出问题的 但是在主函数中调用这个函数 可以正常显示 为什么?
[/Quote]
aweer 2010-05-08
  • 打赏
  • 举报
回复
哦。还有记得不要返回局部变量的指针
cattycat 2010-05-08
  • 打赏
  • 举报
回复
偶尔成功并不能说明问题,这种事情不要假想了。总之,建议不要这么写,如果在真的系统中这没用,出了问题,带来的问题会很惨的。
mstlq 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhangjian33446 的回复:]
小弟还有一个问题 static修饰的局部变量 不论函数被调用多少次 都只开辟一个静态空间?
[/Quote]
是……
ps:新问题一般应该开新帖讨论
butterflygogogo 2010-05-08
  • 打赏
  • 举报
回复
小弟还有一个问题 static修饰的局部变量 不论函数被调用多少次 都只开辟一个静态空间?
嘎文 2010-05-08
  • 打赏
  • 举报
回复
这情况可遇不可求的,偶刚才写的程序,变量没有初始化,弄的我折腾半天,小心唯尚啊
pengzhixi 2010-05-08
  • 打赏
  • 举报
回复
打算靠RP吃饭,以后都可以这么做了。
unituniverse2 2010-05-08
  • 打赏
  • 举报
回复
因为出栈后垃圾值还没有被别的操作覆盖到
mstlq 2010-05-08
  • 打赏
  • 举报
回复
运气好……
栈上的空间没有被改写……


楼主可以类比下面情况

1.“抢劫银行是有问题的”
2.“今天我抢劫银行了,但是很幸运没有被警察抓到”

64,654

社区成员

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

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