0
A
回答
2
只有當你要在性能關鍵的代碼中默認構建大量的POD對象,然後填充它時,纔會有意義的初始化。他們以後有效的數據 - 例如如果您要創建一個包含一百萬個對象的數組,然後用有效數據填充數組的對象。在這種情況下,你可能想要避免初始化,因爲當你只是在之後再次覆蓋它時,會浪費CPU週期來將所有內容全部清零。
但是,如果你這樣做,一定要把/*眼斂評論大量的*在你的類的.h文件中/警告有關用戶的你在其他任何徹底做什麼,爲什麼,並記錄程序員的文檔你維護。追蹤未初始化值的錯誤並沒有多少樂趣......
0
在書:「關於C++反芻」,由安德魯·柯尼希和芭芭拉哞,第4章
是否每個構造函數需要初始化每一個數據成員? 這並非總是如此,有時你的數據成員有它的意義,當你的對象存在一段時間,這取決於。
我擁有的這本書不是原來的英文版本,所以我有點翻譯它。如果你想知道更多,請閱讀整章4 :)
1
經驗法則是一個對象在一個未初始化的狀態下永遠不應該存在。實現這一點的唯一方法是在構建過程中初始化所有成員變量。處於未初始化狀態的對象與無效狀態之間存在差異。未初始化狀態發生在構造期間成員變量未初始化對象時。由於變量可能包含未知值,因此依賴它們的任何成員函數可能會間歇性地表現不同。無效狀態將變量初始化爲默認值,以提供一些期望,該對象在構建後總是表現相同。
0
永遠不要說永遠。
這是一個非常非常好的實踐初始化每個數據成員。但有時候,在非常特殊的情況下,如果要創建大量對象(這將花費比您想要的更多的CPU週期),您可能需要跳過一些初始化操作,稍後您將初始化它們,並且您可以保證在初始化之前沒有數據成員會被使用。
相關問題
- 1. 應該在使用之前初始化C++類的Qt類數據成員嗎?
- 2. 類成員初始化C++
- 3. C++ 11是否重新初始化初始化成員字段?
- 4. 使用另一個類成員初始化類成員C++
- 5. 初始化一個類中的靜態數據成員(類)C++
- 6. GCC - 成員應該在成員初始化列表中初始化
- 7. 初始化對象數據成員C++
- 8. C++靜態數據成員初始化
- 9. C++類的靜態成員初始化
- 10. 類成員初始化
- 11. C++ std :: shared_ptr會初始化類中的其他成員數據
- 12. C++初始化類成員對象
- 13. C++類構造和成員初始化
- 14. C++類靜態成員初始化
- 15. C++ - 初始化類成員與實例
- 16. C++類成員初始化兩次
- 17. C++類成員初始化(POCO)
- 18. 初始化數據成員引用++
- 19. 在C#中初始化子類中的父類數組成員
- 20. 如何用此類的其他成員數據初始化類成員數據?
- 21. C中的全局變量是否始終初始化爲零?
- 22. Basic C++:我如何初始化一個類的struct成員?
- 23. 在C++中初始化一個類數組成員
- 24. 應該始終初始化Model類的組合屬性?
- 25. c#中的成員初始化
- 26. C++初始化一個類的成員數組的所有值
- 27. C++成員數組未初始化
- 28. 常量數組類成員初始化
- 29. 我可以使用初始化器列表中初始化的C++類成員,稍後在列表中嗎?
- 30. 用C數組初始化++中使用數組成員
是的,你應該。 (用null等初始化指針var)。 – adatapost
如果我沒有,我會在GCC上得到錯誤。被初始化是一件好事,在某些情況下,C++ 11使它非常容易,允許使用如下語法:'int intMember = 5;',它被填充到任何未指定的初始化中。這也提出了一點,如果你不初始化一個成員,它仍然會在構造函數的主體之前被自動初始化。 – chris
不要打折初始化的「文檔」方面。讀取代碼的每個人都可以看到起始狀態,而不必在可以設置默認值的不同文件之間跳動,並閱讀標準以查看如果未指定默認值會發生什麼情況。它使你的意圖清晰。 – John3136