只有一个小问题:
你能告诉我在this代码中有什么问题吗?它应该打印出9,但它做了4.8921e-270,然而,当不注释第4行时,它也工作得很好。
我不明白这里可能出了什么问题。谢谢!
代码:
double& foo() {
double x = 9;
double &y = x;
//cout << y << "\n";
return y;
}
int main() {
cout << foo() << "\n";
}结果:4.8921e-270
发布于 2011-10-04 21:42:16
返回堆栈上对象的引用/指针是一个糟糕的想法。当您离开函数时,它们可能会被销毁。尝试按值返回:
double foo() {
double x = 9;
double &y = x;
//cout << y << "\n";
return y;
}现在,返回值被复制,而不是对可能不再存在的对象的引用。
发布于 2011-10-04 21:42:31
您正在返回一个对本地对象的引用,当foo完成时,该对象将不复存在,然后当您取消对它的引用时,您会得到未定义的行为。
发布于 2011-10-04 21:48:21
double foo() {
double x = 9;
double &y = x;
//cout << y << "\n";
return y;
}返回对堆栈上的对象的引用不是一个好主意。当你离开这个函数时,它们很可能会消失。您可以尝试按值返回它。
https://stackoverflow.com/questions/7648820
复制相似问题