55
A
回答
90
在C++中,當執行進入構造函數的主體時,對象被認爲是完全初始化的。
你說:
「我想知道爲什麼常量必須 在構造函數初始化intialized 列表,而不是在它的身上?」。
你缺少什麼是初始化發生在初始化列表,分配發生在構造函數體。邏輯步驟:
1)const對象只能被初始化。
2)對象的所有成員都在初始化列表中初始化。即使你沒有在那裏明確地初始化它們,編譯器也會很樂意爲你做這件事:-)
3)因此,把1)和2)放在一起,一個const成員只能賦值給它在初始化時發生,這在初始化列表中發生。
9
const
並且引用變量必須在它們聲明的行上初始化。
class Something
{
private:
const int m_nValue;
public:
Something()
{
m_nValue = 5;
}
};
會產生等效的代碼;
const int nValue; // error, const vars must be assigned values immediately
nValue = 5;
在構造函數的主體中分配const或引用成員變量值是不夠的。
C++提供了另一種初始化成員變量的方法,它允許在創建成員變量時進行初始化,而不是在之後進行。這是通過使用初始化列表完成的。
您可以通過兩種方式爲變量賦值:顯式隱含: view plaincopy to clipboardprint?
int nValue = 5; // explicit assignment
double dValue(4.7); // implicit assignment
使用初始化列表與進行隱式賦值非常相似。
請記住,用於初始化基本和成員數據對象的成員初始化列表位於定義中,而不是構造函數的聲明。
-2
由於常量變量和引用必須在聲明時(即在使用之前)初始化。 但構造函數將值分配給一個varaible不initailize變量,因此您必須使用initailizier列表常數和引用
相關問題
- 1. 在構造函數範圍初始化而不是成員初始化列表
- 2. 必須在構造函數庫/成員中初始化?
- 3. 帶錯誤的引用變量,必須在構造函數庫/成員初始化程序中初始化
- 4. 初始化在定義與初始化在構造函數中
- 5. auto_ptr構造函數體中的成員初始化(不在初始化程序列表中)
- 6. 什麼時候在構造函數初始化列表中初始化時構造成員對象?
- 7. 初始化的聲明VS在構造函數初始化
- 8. Java - 私有初始化程序或在構造函數中的初始化?
- 9. 在函數中初始化,並沒有在主要初始化
- 10. 在構造函數中初始化
- 11. 在構造函數中初始化ArrayList
- 12. servicehost構造函數不初始化其成員在linux(mono - vb.net)
- 13. 靜態成員必須初始化?
- 14. 在初始化其他成員時跳過結構成員的初始化
- 15. 初始化塊vs構造函數vs變量初始化
- 16. 構造函數初始化vs獲取集合初始化
- 17. 帶空初始化的構造函數初始化列表
- 18. 爲什麼靜態成員必須在main()之外初始化?
- 19. 在構造函數初始化程序中使用成員的成員函數
- 20. 在C++ 98中,'dvd1'必須由構造函數初始化,而不是'{...}'
- 21. 在初始化列表中初始化引用對象成員
- 22. 結構成員初始化
- 23. 結構成員初始化
- 24. 爲什麼不是我的類構造函數初始化其成員變量?
- 25. 在C++中的類構造函數中初始化列表初始化
- 26. 對象引用必須在構造函數庫/成員初始值設定項列表中初始化
- 27. 不能在成員初始化列表初始化對象
- 28. 線程化類成員函數;線程初始化通過初始化列表
- 29. C++中初始化構造
- 30. 初始化在構造
恭喜你的第一個答案......^_^ – paercebal 2008-12-10 09:29:21