我聽說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;
}
我聽說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;
}
f的析構函數在返回值j被捕獲後調用。
你可能想是這樣的,如果你想J可爲2:
int i()
{
int j=3;
{
f k(j);
}
return j;
}
銷燬的順序和return語句的更詳細的說明,請參見C++ destructor & function call order。
您仍然只初始化參考一次;賦值和初始化不一樣。初始化設置h
,以便它引用j
(您永遠不會更改)。您的分配僅更改j
的值,該值與h
相同,但不會導致h
引用不同的變量。
太棒了。非常感謝你。 – brett 2010-08-05 06:17:15
我希望這段代碼只是顯示這個問題,存儲一個對在類外部定義的變量的引用是非常危險的,因爲當引用變量熄滅時,你的類沒有任何控制權(或知識)的範圍。
不知道結構可以像C++中的類一樣使用。好的問題.. – Nils 2010-08-05 06:21:22
Nils:C++中結構和類之間的唯一區別是默認可訪問性。對於類,默認是私有的,但對於結構,默認是公共的。爲了與C兼容,methinks ... – harald 2010-08-05 06:47:53
這不是一個參考問題,但具有範圍和對象的生命週期。 – 2010-08-05 08:30:28