2012-05-18 21 views
-3

可能重複:
Returning the address of local or temporary variable
Can a local variable's memory be accessed outside its scope?
return reference to local variable當您返回一個參考文件時它是一個未定義的行爲。到一個局部變量?

它是一個未定義的行爲,當您返回的Ref。到一個局部變量?

http://ideone.com/Kz381

int & func(){ 

     int x = 10; 
     return x; 

} 

int main() { 

     int &y = func(); 
     cout << y << endl; 

} 
+1

我不確定在本規範中「局部變量」是否有特殊意義,但我想這對於沒有靜態存儲持續時間的任何局部變量都是未定義的行爲。 –

回答

7

是的。該函數結束時變量不再可用。

你真不走運似乎有用。問題是,內存不能清除,所以10仍然存在,但它可以在任何時候回收,所以它絕對不安全。

+0

「未定義行爲」的定義。 –

+0

你的意思是這是不是!並不總是打印相同的結果?在func結束後局部變量將被釋放! – faressoft

+0

是的,它是ub。是的,它並不總是打印出相同的結果。函數結束後局部變量將超出範圍,因此可以用任何廢話來重寫。 – Martol1ni

5

如果你想獲得技術,返回它不是未定義的行爲。當您嘗試使用返回時,您只會得到未定義的行爲。

相關問題