僅標頭庫
外觀
此條目需要補充更多來源。 (2024年3月29日) |
在一個C或者C++語言的程式代碼中,一個在頭文件便已包含了所有宏、函數和類的實現,而且在包含了頭文件後這些實現都可以被編譯器讀取訪問;以這種頭文件所實現的函式庫便叫做僅標頭庫或純標頭檔函式庫(Header-only)[1]。僅標頭庫並不需要分開編譯、封包和安裝即可使用;只需指導編譯器到該些頭文件的路徑,還有使用#include
預處理器導入該些頭文件進應用程式代碼即可使用。此外,因程式代碼的可讀性和存在,編譯器的最佳化器可以更佳地掃描代碼。
缺點如下:
- 脆弱性——對該庫的大多數變更都需要重新編譯使用該庫的所有編譯翻譯單元
- 編譯時間變長——編譯器必須編譯導入文件中所有的組件實現,而不僅僅是它們的接口
- 代碼膨脹(有爭議)——在非類別函數中必要使用內聯語句可能會因過度使用而導致代碼膨脹。
儘管如此,僅標頭庫仍很受歡迎,因為它避免了(通常比上述更嚴重的)打包問題。
對於C++ 模板,在頭文件中包含定義是編譯的唯一方法,因為編譯器需要知道模板的完整定義才能將運用了該些模版的實例化。
參考
[編輯]- ^ Wilson, Mathew. Imperfect C++. Addison-Wesley. 2004: 177. ISBN 0-321-22877-4.