僅檔頭庫

在一個C或者C++語言的程式碼中,一個在標頭檔便已包含了所有函數的實現,而且在包含了標頭檔後這些實現都可以被編譯器讀取訪問;以這種標頭檔所實現的函式庫便叫做僅檔頭庫純標頭檔函式庫(Header-only)[1]。僅檔頭庫並不需要分開編譯封包安裝即可使用;只需指導編譯器到該些標頭檔的路徑,還有使用#include預處理器匯入該些標頭檔進應用程式代碼即可使用。此外,因程式碼的可讀性和存在,編譯器的最佳化器可以更佳地掃描代碼。

缺點如下:

  • 脆弱性——對該庫的大多數變更都需要重新編譯使用該庫的所有編譯翻譯單元
  • 編譯時間變長——編譯器必須編譯匯入檔案中所有的組件實現,而不僅僅是它們的介面
  • 代碼膨脹(有爭議)——在非類別函數中必要使用行內陳述式可能會因過度使用而導致代碼膨脹。

儘管如此,僅檔頭庫仍很受歡迎,因為它避免了(通常比上述更嚴重的)打包問題。

對於C++ 模板,在標頭檔中包含定義是編譯的唯一方法,因為編譯器需要知道模板的完整定義才能將運用了該些模版的實例化。

參考

  1. ^ Wilson, Mathew. Imperfect C++. Addison-Wesley. 2004: 177. ISBN 0-321-22877-4.