2014-09-29 114 views

回答

5

任何你需要的地方。

如果您需要在頭文件中聲明的東西,包括他們在.h文件。 否則只是在.cpp文件中。

請注意,包含.h文件只是一個文本替換,並且包含的​​.h文件的內容將被完全插入文件的開始位置 #include行的精確點處。 在標準庫之前包含一個屬於項目的標題是一個好習慣,如果你不需要它,就不會包含標題。

你應該記住的最後一件事是,當與大型項目一起工作時,包含很多翻譯單元共享的.h文件中的許多標題可以增加編譯時間,如果標題被修改。通常最好只在適當的文件中包含你所要求的內容(.cpp或.h)。預編譯頭文件也可能有所幫助,但它與您的問題無關。

最後:不要依賴「這個頭文件已經包含在其他地方,我已經通過第二個頭文件包含它」,因爲它可以呈現依賴關係 - 在項目增長時跟蹤硬件並支持循環依賴。

+4

此外,要儘可能強制正確包含:始終首先包含屬於實現文件的標頭。 – Deduplicator 2014-09-29 08:44:15

+0

謝謝,隊友:) – TheGuyWithStreetCred 2014-09-29 08:44:48

+0

@Deduplicator你就是。我通常會更進一步,按照普遍性「排序」包含:首先將自己的文件,接下來的項目中的其他文件,特定的第三方庫,然後廣泛的第三方庫(例如Qt),然後Boost和標準庫最後。 – Angew 2014-09-29 08:47:05

2

我在哪裏#包含的東西像字符串和矢量?在.h或.cpp文件中?

這裏有很多問題需要考慮,特別是當項目變大時(即項目越大,影響越大)。

就個人而言,我遵循下列規則:

  • 如果代碼需要一個標題來編譯,那麼你需要包括它(如果標題聲明事情的std :: API中的字符串,你將不得不包括string和C++文件也是如此)

  • 不包括不需要的標頭(即不是「兩個」 - 如果在.h文件中包含一個標頭,那麼包含.h文件,應該沒事)。

  • 組織標頭項目的文件優先。這意味着如果你有一個C++文件的本地項目頭文件,並且std和boost頭文件,你應該(可能)首先包含本地項目頭文件,然後提升,然後std。

    這是因爲性病頭將是最考驗/穩定的,而最常用的API(這是我的一個盲目的假設)。如果您首先包含std標頭,然後是項目標頭(例如),由於替換爲文本標籤,您可以避免在項目標頭中添加包含項。這基本上會掩蓋一個錯誤,因爲從現在開始,最終必須在所有其他cpp文件的本地項目頭文件之前包含std頭文件。

+0

會記住這一點 – TheGuyWithStreetCred 2014-09-29 08:53:02