C++參考初始化
回答
此規則仍然適用,引用爲成員變量,您必須在構造函數的啓動列表中進行初始化。例如:
class X {
public:
X(int& ri) : mri(ri) {}
// X() {} // ERROR! no explicit initialization of mri
int& mri;
};
int main() {
int i;
X x(i);
}
沒有初始化它,你會得到編譯器錯誤。
(我決定從意見總結等良好的澄清,使這個答案更加有用)
根據標準8.5.3/3(重點煤礦):
的初始化可以省略僅供參考聲明(8.3.5)中的參考,在 函數返回類型聲明中,在其類定義中的類成員聲明中(9.2),以及明確使用 extern說明符。
所以下面的代碼只是定義struct X
其中mri
變量只聲明。如果你創建(定義)X類型的對象,編譯器不會顯示任何錯誤。當你寫:
int main() {
X x; // error, `x.r` is not bound to any object
}
編譯器會抱怨,這是因爲你已經定義x
,這是你還必須綁定x.r一些對象。你可以做的唯一的地方是在構造函數初始化列表中。
您可能還會注意到,當您將引用添加爲非靜態數據成員時,編譯器會將默認構造函數標記爲已刪除。
什麼是反對???這個答案是正確的! (我正準備發佈差不多相同的答案)。 –
讓OP先澄清一下,然後再拍攝到黑暗之前。正確的反應是近距離投票(也許可以發表評論)。請不要在這裏提出脫離主題的問題。 –
OP-s混淆可能來自'int & mri;'看起來像非初始化參考的事實,但我只是在猜測。 – marcinj
- 1. 初始化參考C++
- 2. C:初始化參考變量雙
- 3. GoogleTest初始化參考
- 4. 未定義參考`的std ::的ios_base ::初始化::初始化()」
- 5. 請參考初始化中正在初始化的對象嗎?
- 6. 初始化參考。字段與參考。參數:是否複製?
- 7. 參考<?>值尚未初始化
- 8. 初始化的CollectionView與集合參考
- 9. 參考初始化另一個類
- 10. 避免拷貝初始化時參考
- 11. 類參考成員列表初始化
- 12. Valgrind的C:通過參考與未初始化值
- 13. C++初始化指針/參考/複製細微差別
- 14. 裏面的c + +線程,初始化參考
- 15. 簡單的C++日誌記錄類 - ostream參考初始化
- 16. 用於指針參考初始化的Visual C++語法錯誤
- 17. 問題與傳遞展開參考目標C初始化
- 18. 初始化,初始化與參數和便利初始化
- 19. 添加未初始化的參考集合,然後初始化它
- 20. c#初始化
- 21. C++初始化
- 22. C++ - 初始化與骨料初始化
- 23. C#類初始化不同的參數?
- 24. C++值初始化
- 25. 初始化在C++
- 26. C++莢初始化
- 27. 初始化在C++
- 28. 初始化在C++
- 29. C#初始化類
- 30. 初始化C++ 11
請顯示一些代碼。 –
因爲它們是由成員初始化列表初始化的。 – songyuanyao
_「但我發現,當它是一個類成員時,引用被聲明而不被初始化。這是一個特殊情況?」_證據? –