2012-04-12 60 views
0

我很困惑爲什麼這一個是正確的。返回值是參考類型int&, ,但h()函數返回值int類型的句子return x。那麼,int如何返回到int &無法理解代碼片段的返回類型

這是代碼片段,並且與C++編譯器一起編譯得很好。

int& h() { 
int q; 
static int x; 
return x; 
} 

回答

4

這將返回靜態int的參考。 x在第一次調用函數h時被初始化。使用這樣的:

int& href = h(); 
++href; // increments the static variable 
int& href2 = h(); // another reference to the same static variable 

變量q應該沒有影響,我會認爲這是可疑的。

+0

有點理解 – user1279988 2012-04-12 13:10:04

1

參考意味着你實際上返回實際上是相同的變量,以便改變返回究竟會直接改變的x值的值如果代碼已經writtten:

int h() 
{ 
    int q; 
    static int x; 
    return x; 
} 

(即不參考),那麼你會返回一個副本的值x(雖然你應該公平檢查Return Value Optimization。)返回一個引用是有效的,但是,有時(多線程是一個明顯的例子),其中它可能是不受歡迎和令人困惑的。

1

int&是對int的引用。 x是一個int。因此,返回int&的函數return x;返回對x的引用。

另外:

返回到當地變量的引用是危險的,因爲局部變量銷燬時,該函數退出時。當你獲得參考時,它所引用的東西不存在。這被稱爲懸空參考,它就像一個指向任何東西的指針。

靜態變量不是局部變量,並且在函數退出時不會被破壞。因此,當你得到它時,引用仍指向一個有效的對象。