关于c++返回值的问题

CFan_chen 2011-04-10 09:48:17
我知道函数不能返回局部对象的引用:
const string &manip(const string &s)
{
string ret=s;
return ret; //返回局部对象的引用函数出错
}

//main函数内:

string s("hello");
cout<<manip(s)<<endl;

编译器会警告,运行时会出错。

可是在下面这种情况下就只有警告,但可以正常运行。

double &func(double t)
{
double tt=0.0;
tt=t;
return tt; //返回的也是局部对象啊
}

//main函数内:

double temp=1.5;
cout<<func(temp)<<endl;

程序可以运行不报错,这是为什么呢??
...全文
122 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sghdls 2011-04-10
  • 打赏
  • 举报
回复


这是未定义的。

所以返回引用时,要看看这个引用所指的对象是否在函数调用之前就已存在,这样能减少程序错误。
月中蓝 2011-04-10
  • 打赏
  • 举报
回复
未定义行为,所以结果可能貌似正确,尽量避免
sculfm 2011-04-10
  • 打赏
  • 举报
回复
不能返回局部对象的引用或指针,一定要记住
pengzhixi 2011-04-10
  • 打赏
  • 举报
回复
像这类问题虽然标准没做规定,但是既然很多大师都强调不要返回局部变量的引用,那么就记住就好了。所以不要再问所谓的为什么运行不会错误。当成纯粹的运气吧
booxiong 2011-04-10
  • 打赏
  • 举报
回复
其实,不必过分追求这个原因,这里能够正确运行,一切都是假象,在实际系统中,可能会引起无法预料的问题,极其难以调试
老邓 2011-04-10
  • 打赏
  • 举报
回复
你改变下tt的值试下。
例如:
double &func(double t)
{
double tt = 0.0;
tt = t;
t += 1.3;
return tt; //返回的也是局部对象啊
}

64,654

社区成员

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

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