回答
任何你需要的地方。
如果您需要在頭文件中聲明的東西,包括他們在.h文件。 否則只是在.cpp文件中。
請注意,包含.h文件只是一個文本替換,並且包含的.h文件的內容將被完全插入文件的開始位置
。
在#include
行的精確點處。 在標準庫之前包含一個屬於項目的標題是一個好習慣,如果你不需要它,就不會包含標題。
你應該記住的最後一件事是,當與大型項目一起工作時,包含很多翻譯單元共享的.h文件中的許多標題可以增加編譯時間,如果標題被修改。通常最好只在適當的文件中包含你所要求的內容(.cpp或.h)。預編譯頭文件也可能有所幫助,但它與您的問題無關。
最後:不要依賴「這個頭文件已經包含在其他地方,我已經通過第二個頭文件包含它」,因爲它可以呈現依賴關係 - 在項目增長時跟蹤硬件並支持循環依賴。
我在哪裏#包含的東西像字符串和矢量?在.h或.cpp文件中?
這裏有很多問題需要考慮,特別是當項目變大時(即項目越大,影響越大)。
就個人而言,我遵循下列規則:
如果代碼需要一個標題來編譯,那麼你需要包括它(如果標題聲明事情的std :: API中的字符串,你將不得不包括
string
和C++文件也是如此)不包括不需要的標頭(即不是「兩個」 - 如果在.h文件中包含一個標頭,那麼包含.h文件,應該沒事)。
組織標頭項目的文件優先。這意味着如果你有一個C++文件的本地項目頭文件,並且std和boost頭文件,你應該(可能)首先包含本地項目頭文件,然後提升,然後std。
這是因爲性病頭將是最考驗/穩定的,而最常用的API(這是我的一個盲目的假設)。如果您首先包含std標頭,然後是項目標頭(例如),由於替換爲文本標籤,您可以避免在項目標頭中添加包含項。這基本上會掩蓋一個錯誤,因爲從現在開始,最終必須在所有其他cpp文件的本地項目頭文件之前包含std頭文件。
會記住這一點 – TheGuyWithStreetCred 2014-09-29 08:53:02
- 1. #include在C/C++頭文件
- 2. octave頭文件的位置
- 3. C頭文件的位置
- 4. #include文件插入正文無頭
- 5. 微軟#include頭文件(.h)中的「_HFILE」
- 6. #include <Dbghelp.h>不包含頭文件
- 7. angular如何知道ng-include文件的位置?
- 8. php,include,在基文件中注入de頭文件的代碼
- 9. C++ :: #include:多個源文件中的模板類頭文件?
- 10. 安裝位置缺少頭文件
- 11. MSVC預編譯頭文件:哪些文件需要#include「stdafx.h」?
- 12. 將robots.txt文件放置在碼頭服務器上的位置?
- 13. include(「文件」)後設置一個cookie
- 14. 的#include <utility>在開發的C++頭文件
- 15. PHP頭位置
- 16. PHP頭位置
- 17. #include頭文件時,他們在不同的目錄結構
- 18. gcc在Windows中的替代頭文件#include <dirent.h>
- 19. 很多#include語句和頭文件的管理
- 20. 的Xcode 4.3找不到頭文件/ usr/include目錄
- 21. 帶有所有必要#include語句的單頭文件
- 22. Cmake在/ usr/local/include中找到/ usr/local/lib中的頭文件
- 23. 如何#include Qt中的現有頭文件?
- 24. makefile找不到來自-I include路徑的頭文件
- 25. 位圖文件頭大小
- 26. SSIS 2012 - 條件標頭的位置
- 27. xcopy include文件夾
- 28. String#include?只檢查第一個位置
- 29. 選擇一個位置include指令
- 30. 配置文件的位置
此外,要儘可能強制正確包含:始終首先包含屬於實現文件的標頭。 – Deduplicator 2014-09-29 08:44:15
謝謝,隊友:) – TheGuyWithStreetCred 2014-09-29 08:44:48
@Deduplicator你就是。我通常會更進一步,按照普遍性「排序」包含:首先將自己的文件,接下來的項目中的其他文件,特定的第三方庫,然後廣泛的第三方庫(例如Qt),然後Boost和標準庫最後。 – Angew 2014-09-29 08:47:05