我很困惑爲什麼這一個是正確的。返回值是參考類型int&
, ,但h()
函數返回值int
類型的句子return x
。那麼,int
如何返回到int &
?無法理解代碼片段的返回類型
這是代碼片段,並且與C++編譯器一起編譯得很好。
int& h() {
int q;
static int x;
return x;
}
我很困惑爲什麼這一個是正確的。返回值是參考類型int&
, ,但h()
函數返回值int
類型的句子return x
。那麼,int
如何返回到int &
?無法理解代碼片段的返回類型
這是代碼片段,並且與C++編譯器一起編譯得很好。
int& h() {
int q;
static int x;
return x;
}
這將返回靜態int
的參考。 x
在第一次調用函數h
時被初始化。使用這樣的:
int& href = h();
++href; // increments the static variable
int& href2 = h(); // another reference to the same static variable
變量q
應該沒有影響,我會認爲這是可疑的。
參考意味着你實際上返回實際上是相同的變量,以便改變返回究竟會直接改變的x
值的值如果代碼已經writtten:
int h()
{
int q;
static int x;
return x;
}
(即不參考),那麼你會返回一個副本的值x
(雖然你應該公平檢查Return Value Optimization。)返回一個引用是有效的,但是,有時(多線程是一個明顯的例子),其中它可能是不受歡迎和令人困惑的。
int&
是對int的引用。 x
是一個int。因此,返回int&
的函數return x;
返回對x
的引用。
另外:
返回到當地變量的引用是危險的,因爲局部變量銷燬時,該函數退出時。當你獲得參考時,它所引用的東西不存在。這被稱爲懸空參考,它就像一個指向任何東西的指針。
靜態變量不是局部變量,並且在函數退出時不會被破壞。因此,當你得到它時,引用仍指向一個有效的對象。
有點理解 – user1279988 2012-04-12 13:10:04