[英]C++ : Best place to include header files
假設我們有四個文件:ah,a.cpp,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中實際使用的定義(例如struct
或typedef
等)(例如,在函數原型中作為參數或返回類型),則應將其包括在標頭。
否則,如果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.