簡體   English   中英

包含.cpp標准的文件

[英]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.

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