例如這個函數f是這樣定義的:爲什麼你可以通過引用返回一個局部變量而不是臨時變量的函數? C++
int f(int x){return x;}
你知道你不能分配給該臨時INT參考:
int& rf=f(2);// this will give an error
但如果我重新定義了我的函數f這樣:
int& f(int x){return x;}
f(2);// so now f(2) is a reference of x, which has been destroyed
所以我的問題是:如何編譯器不讓你創建一個temp的引用在該陳述後將被銷燬的文件(在第一種情況下)。另一方面它可以讓你創建一個參考f(2)到x
,而編譯器知道這個將在return
之後被銷燬。
這是UB(好吧,無論如何都要訪問參考),任何理智的編譯器都會提醒你。 – 2012-03-06 15:35:55