我在C ++程序中运行以下简单程序:
#include <iostream>
using namespace std;
string& ShowString()
{
string s1 = "abcd";
return s1;
}
int main()
{
string s2 = ShowString();
cout << s2 << endl;
return 0;
}
,输出为:abcd
问题是函数ShowString
返回对局部变量的引用,当程序到达cout << s2 << endl
时,s1
应该被销毁(以及s2
})。但输出仍然是正确的,这使我得出结论,虽然s1
不再存在,但它在堆栈内存中的内容仍然有效(可能直到其他东西覆盖它)。
如果您能告诉我这个结论是否正确,我感激不尽。
由于
答案 0 :(得分:2)
因为它是未定义的行为。你不能相信这个价值。