[ 2007-05-25 20:27:27 | 作者: Admin ] 字型大小: 大 | 中 | 小 關於include的原則最多,因為包含標頭檔相當於將代碼複製到本檔案來編譯,而標頭檔又經常是用來被別人包含的,所以工程檔案多了,每個檔案都有include鏈(包含的檔案又include了其他檔案),該鏈條不會止步於你工程,而會延伸到你所有使用的第3方庫裡面。
A.能夠去掉的include就去掉。
說明:1.代碼編寫過程中或多或少都有一些曆史遺留的不必要的標頭檔包含在你的檔案裡面,找到他們並去掉之。
2.去掉include鏈裡面重複的include 。
B.能夠在cpp裡面include的標頭檔不要在標頭檔裡面include。
說明:盡量去掉每個cpp會被串起來的標頭檔膨脹的機會。
C.能夠用前向聲明的就不要include,標頭檔裡面也是一樣
說明:在標頭檔裡面用前向聲明然後儲存指標或者引用,在具體實現的cpp裡面再包含標頭檔,雖然看起來和《C++ coding Standards》“Make header files self-sufficient”有些衝突,但是在一些核心的.h(被很多類include的)裡面作改造工作,還是能夠收到很大的降低編譯時間效果,而付出的代價就是原來只需要包含該標頭檔就可以編譯成功的cpp需要額外包含一些標頭檔。
舉個例子: Foo類標頭檔使用了前向申明儲存了A類和B類的指標或者引用為成員變數,在Foo類的cpp裡面才包含A和B的標頭檔,而當C類需要使用Foo類時候包含Foo類的標頭檔,但是操作中又需要調用A的成員函數,C不同時包含A的標頭檔的花就會出現編譯失敗。
雖然表面上是讓代碼更加複雜了,但是除卻帶來降低編譯時間的好處之外,代碼也在強迫你進行解耦合,如果說你cpp裡面需要包含的標頭檔越多,說明你這個類需要知道的對象就越多,你可以乘機檢查一下自己的代碼又沒有不必要的耦合,為什麼這個cpp需要知道那麼多的本來可能屬於別的類的細節.....
D.把大多數模組都要使用的庫檔案或者穩定類的標頭檔include放到先行編譯標頭檔“stdafx.h”裡面
說明:由於先行編譯標頭檔裡面include的內容只會compile一次而被link多次,把一些常用類放到這裡會降低很多編譯時間,但也不能亂來,要點在於 “大多數”和“穩定”,如果一個標頭檔經常變化,他的一次小改動都會引起整個工程rebuild,哪怕只是一個注釋,因為所有的cpp檔案都包含了stdafx.h而stdafx.h又包含了這個容易變動的標頭檔。
E.使用Pimpl慣用法
說明:關於Pimpl大家可以查下資料,《C++ coding Standards》裡面也有講解,基本上就是採用一個私人的前向申明的stuct指標把所有protect成員都封裝起來起來.基本上是一個最終極的解決方案,但是對我們現有架構改造太大,不敢全面實行,我們只選擇了數個最有價值的類進行了改造,打算以後在其他項目裡面再全面應用。