[英]#include standard files in more than one .cpp, versus #include it in precompiled header affects size of executable?
[英]Include files in .cpp standard
請在下面找到一個簡單的例子。 我知道.hpp文件必須包含或轉發聲明它使用的所有內容我想知道是否最好包含.cpp文件中使用的所有.hpp文件。 我問這個是因為我最近看到我正在研究的一個新項目,人們傾向於避免在很多情況下包括標題。
在這種情況下:在a.cpp中包含b.hpp是否合適? 我知道它已經被包含在a.hpp中了,但是我個人覺得如果一個符號出現在.cpp中,它應該包括在內(或者如果可能的話,也可以向前聲明)
a.hpp
#pragma once
#include "b.hpp"
class C; //forward declaration of C
class A
{
public:
B get_b();
private:
B _b;
C* _c;
};
a.cpp
#include "a.hpp"
//needed or I can leave it out, since B is included already in a.hpp?
#include "b.hpp"
B A::get_b()
{
return _b;
}
嘗試將#include
s移動到.cpp
文件中。 它減少了編譯時間並避免了在整個項目中傳播聲明。 所以,如果你可以在.cpp
文件中包含b.hpp
。
在頭文件中包含b.hpp
后,無需將其包含在.cpp
文件中。 再次將它包含在.cpp
文件中由於標題保護(如果你把它們)沒有效果。
關於哪些文件包含在.cpp(和.hpp)中有兩個主要問題
1)編譯時間:減少包含數量以減少編譯時間
粗略:僅包含包含類數據/函數成員或您使用的內聯函數/模板的文件。 如果您只引用一個類,則前向聲明的編譯速度將比整個包含文件快得多。
2)脆弱性:不依賴於包含您需要的內容的包含文件
如果a.hpp包含b.hpp並且你需要在b.hpp中定義的東西(見上文)然后a.hpp的實現者停止需要a.hpp,你的代碼就會破壞
所有這些都是確定性的,應該努力使其正確
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.