簡體   English   中英

C ++:包含頭文件的最佳位置

[英]C++ : Best place to include header files

假設我們有四個文件:ah,a.cp​​p,b1.h和b2.h。 並且,我們需要在ah或a.cpp中包括b1.h和b2.h。 我應該在哪里包括b1和b2? 假設只有a.cpp需要b1和b2。

如果頭文件不需要它,則將其包含在cpp中。

這樣可以減少編譯時間,並有助於了解模塊之間的依賴性。

一般規則是,應避免在不使用其定義的標頭中包含標頭。

僅在標題中包含所需的內容。

ah的類定義和函數聲明是否需要b1.h或b2.h? 然后包括所需的內容。

否則,僅包括.cpp。

請記住,每次包含文件時,編譯所需的時間就更長。

以下是一些需要什么時的提示:

  • 不需要包含返回值或參數。 例如std::string blahFunc(std::string a); 不需要頭文件中包含的<string> (盡管仍然需要一個前向聲明)

  • 指針類型不需要被包括,它們只需要被前向聲明。 例如randomType * f(); 不需要在標頭中包含randomType的標頭。 您要做的就是使用class randomType;向前聲明class randomType;

  • 引用也可以只被向前聲明。

如果b1.h和/或b2.h具有在ah中實際使用的定義(例如structtypedef等)(例如,在函數原型中作為參數或返回類型),則應將其包括在標頭。

否則,如果b1.h / b2.h僅提供a.cpp內部使用的定義(私有成員等),則將其包括在a.cpp的頂部。

您應該嘗試僅在文件中包含編譯器理解該文件實際需要的內容。 (與Windows不同,怪異的是<Windows.h> 。)

我認為include指令應始終位於您的.h **文件中。 您應該放入a.cpp文件中的唯一內容應該是

#include "a.hpp"

為了理解原因,假設鮑勃在程序中使用了您的代碼,並且您的代碼未公開(即,您僅以庫的形式提供)。 然后,他所看到的只是您的標題。 如果您在標頭中包含所需的所有內容,那么他​​仍將能夠檢查代碼的依賴項,並確保他具有代碼所需的所有內容。 如果將include指令放在.c **文件中,那么除非您的代碼是開源的(即他有權訪問.c **文件),否則他將無法查看他必須確保安裝的軟件包已安裝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM