首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codepad.org C++代码给出错误的结果

Codepad.org C++代码给出错误的结果
EN

Stack Overflow用户
提问于 2011-10-04 21:39:53
回答 5查看 164关注 0票数 1

只有一个小问题:

你能告诉我在this代码中有什么问题吗?它应该打印出9,但它做了4.8921e-270,然而,当不注释第4行时,它也工作得很好。

我不明白这里可能出了什么问题。谢谢!

代码:

代码语言:javascript
复制
double& foo() {
  double x = 9;
  double &y = x;
  //cout << y << "\n";
  return y;
}

int main() {
  cout << foo() << "\n";
}

结果:4.8921e-270

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-10-04 21:42:16

返回堆栈上对象的引用/指针是一个糟糕的想法。当您离开函数时,它们可能会被销毁。尝试按值返回:

代码语言:javascript
复制
double foo() {
  double x = 9;
  double &y = x;
  //cout << y << "\n";
  return y;
}

现在,返回值被复制,而不是对可能不再存在的对象的引用。

票数 8
EN

Stack Overflow用户

发布于 2011-10-04 21:42:31

您正在返回一个对本地对象的引用,当foo完成时,该对象将不复存在,然后当您取消对它的引用时,您会得到未定义的行为。

票数 4
EN

Stack Overflow用户

发布于 2011-10-04 21:48:21

代码语言:javascript
复制
double foo() {
  double x = 9;
  double &y = x;
  //cout << y << "\n";
  return y;
}

返回对堆栈上的对象的引用不是一个好主意。当你离开这个函数时,它们很可能会消失。您可以尝试按值返回它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7648820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档