在一个C或者C++语言的程序代码中,一个在头文件便已包含了所有函数的实现,而且在包含了头文件后这些实现都可以被编译器读取访问;以这种头文件所实现的函数库便叫做仅标头库纯头文件函数库(Header-only)[1]。仅标头库并不需要分开编译数据包安装即可使用;只需指导编译器到该些头文件的路径,还有使用#include预处理器导入该些头文件进应用程序代码即可使用。此外,因程序代码的可读性和存在,编译器的优化器可以更佳地扫描代码。

缺点如下:

  • 脆弱性——对该库的大多数变更都需要重新编译使用该库的所有编译翻译单元
  • 编译时间变长——编译器必须编译导入文件中所有的组件实现,而不仅仅是它们的接口
  • 代码膨胀(有争议)——在非类别函数中必要使用内联语句可能会因过度使用而导致代码膨胀。

尽管如此,仅标头库仍很受欢迎,因为它避免了(通常比上述更严重的)打包问题。

对于C++ 模板,在头文件中包含定义是编译的唯一方法,因为编译器需要知道模板的完整定义才能将运用了该些模版的实例化。

参考

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