为什么引用局部变量仍然有效

时间:2015-07-18 18:49:10

标签: c++

我在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不再存在,但它在堆栈内存中的内容仍然有效(可能直到其他东西覆盖它)。

如果您能告诉我这个结论是否正确,我感激不尽。

由于

1 个答案:

答案 0 :(得分:2)

因为它是未定义的行为。你不能相信这个价值。