我已經知道當程序離開它的範圍時變量被銷燬。然而,這似乎並沒有發生,當我試圖在下面的代碼片斷代碼:返回一個局部變量的引用工作正常嗎?
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