2010-08-05 76 views
5

我聽說C++中的引用只能一次投入,但是這給了我1是我的輸出並且沒有返回任何錯誤!C++中的引用問題

struct f { 
    f(int& g) : h(g) { 
    h = 1; 
    } 

    ~f() { 
    h = 2; 
    } 

    int& h; 
}; 

int i() { 
    int j = 3; 
    f k(j); 
    return j; 
} 
+0

不知道結構可以像C++中的類一樣使用。好的問題.. – Nils 2010-08-05 06:21:22

+1

Nils:C++中結構和類之間的唯一區別是默認可訪問性。對於類,默認是私有的,但對於結構,默認是公共的。爲了與C兼容,methinks ... – harald 2010-08-05 06:47:53

+0

這不是一個參考問題,但具有範圍和對象的生命週期。 – 2010-08-05 08:30:28

回答

9

f的析構函數在返回值j被捕獲後調用。

你可能想是這樣的,如果你想J可爲2:

int i() 
{ 
    int j=3; 
    { 
     f k(j); 
    } 
    return j; 
} 

銷燬的順序和return語句的更詳細的說明,請參見C++ destructor & function call order

5

您仍然只初始化參考一次;賦值和初始化不一樣。初始化設置h,以便它引用j(您永遠不會更改)。您的分配僅更改j的值,該值與h相同,但不會導致h引用不同的變量。

+0

太棒了。非常感謝你。 – brett 2010-08-05 06:17:15

0

我希望這段代碼只是顯示這個問題,存儲一個對在類外部定義的變量的引用是非常危險的,因爲當引用變量熄滅時,你的類沒有任何控制權(或知識)的範圍。