2012-04-15 63 views
1

我在我的項目的所有代碼文件中包含幾個STL頭文件,如列表和向量。我知道我自己的標題,我應該使用包括守衛,但是當它們沒有被我定義時,這種情況怎麼樣?在每個類中包含相同的頭文件

在我的每個文件中包含相同的標題是不好的?每次包含都會有性能損失嗎?

+1

我完全相信你有*標準庫*頭,不* STL *頭... – Griwes 2012-04-15 10:21:31

回答

1

沒有性能成本。標準頭文件具有自己的包含防護,並且所有包含防護都由預處理器優化,因此文件實際上並未每次都重新加載。

正確性和可維護性始終是第一個問題......當您重新安排文件並獲取「未定義標識符」錯誤或更糟時,您必須保存多少編譯時間才能彌補修復工作的工作量!

編輯:從所有頭文件中包含相同的標準頭文件不需要性能成本。從源文件中添加額外的標準頭文件會有一些性能成本。這個問題有點模棱兩可......但無論哪種方式,C++編譯中非常昂貴的部分通常是模板實例化,而不是解析文本。

0

作爲一般規則,
只有源文件需要時才能包含頭文件。

包括警衛會阻止相同的頭文件被多次包含在同一個翻譯單元中,並且防止鏈接錯誤,但是,Ofcourse標準庫頭文件有自己的頭文件。

但是,請注意,如果在不需要它們的源文件中包含頭文件,那麼它可能會增加編譯&導致名稱空間名稱受到污染。

+0

你願意「脫身」與具有定義在兩個不同的文件兩種不同方式的象徵,由於不同的頭包,或者你想看到一個錯誤?如果沒有'使用命名空間',它不應該發生,你不應該這樣做,但即使假設,情況也是值得一提的。 – Potatoswatter 2012-04-15 04:15:46

+0

@Patatoswatter:爲什麼最終會在兩個不同的文件中以兩種不同的方式定義一個符號?只要它們是標準的圖書館符號,並且不打算故意自己拍攝,那根本不應該發生,如果它發生了,它應該被追蹤並糾正。 – 2012-04-15 04:20:41

+0

...更簡潔:名稱空間污染不是太多頭文件的影響,它是在名稱空間範圍內不恰當地定義事物的結果。 – Potatoswatter 2012-04-15 04:22:33