我已经知道当程序离开它的范围时变量被销毁。然而,这似乎并没有发生,当我试图在下面的代码片断代码:返回一个局部变量的引用工作正常吗?
int& somethin()
{
int x1 = 4;
return x1;
}
int main() {
int x11;
x11 = somethin();
cout << x11 << endl;
return 0;
}
出人意料的是,输出结果是:4
而当我宣布“X11”作为参考变量,我得到垃圾值。
任何解释?
注:我重复这个试验了很多次。我不认为这是关于运气。 注意:在StackOverflow中有一个人问过同样的问题,答案是关于测试员是幸运的。
想想执行堆栈在一台机器如何运作 - 大多数C++运行时环境不零出一个弹出堆栈帧,这就是为什么基准的目标值'4'仍然存在 - 但这并不意味着你应该依赖那种行为。 – Dai
[我得到0](http://cpp.sh/243to) – yrHeTaTeJlb
这是未定义的行为。这意味着任何具体的行为都不会发生。这就是为什么它很危险。 – StoryTeller