c++ - 仅头文件库的好处

标签 c++ header-only

只有头文件的库有什么好处?为什么你会以这种方式编写它而不是将实现放入单独的文件中?

最佳答案

仅 header 库的好处:

  • 简化了构建过程。您不需要构建库,也不需要在构建的链接步骤中指定编译的库。如果您确实有一个已编译的库,您可能希望构建它的多个版本:一个启用调试编译,另一个启用优化,可能还有另一个去除符号。对于多平台系统,甚至可能更多。

仅头文件库的缺点:

  • 更大的目标文件。在某些源文件中使用的库中的每个内联方法也将在该源文件的编译目标文件中获得一个弱符号、行外定义。这会减慢编译器的速度,也会减慢链接器的速度。编译器必须生成所有这些膨胀,然后链接器必须将其过滤掉。

  • 编译时间更长。除了上面提到的膨胀问题之外,编译将花费更长的时间,因为头文件在本质上与仅头文件库相比编译库更大。需要为使用该库的每个源文件解析这些大标题。另一个因素是,仅 header 库中的那些头文件必须#include 内联定义所需的 header ,以及将库构建为编译库时所需的 header 。

  • 比较纠结的编译。由于仅 header 库需要额外的 #include,因此您会在仅 header 库中获得更多依赖项。更改库中某些关键功能的实现,您可能需要重新编译整个项目。对已编译库的源文件进行更改,您所要做的就是重新编译该库源文件,使用新的 .o 文件更新已编译库,然后重新链接应用程序。

  • 人类更难阅读。即使有最好的文档,图书馆的用户也经常不得不求助于阅读图书馆的标题。仅 header 库中的 header 充满了妨碍理解接口(interface)的实现细节。使用已编译的库,您所看到的只是接口(interface)和对实现功能的简短评论,而这通常就是您想要的。这就是你应该想要的。您无需了解实现细节即可知道如何使用该库。

关于c++ - 仅头文件库的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12671383/

相关文章:

c++ - 无法获得适用于仅 header 库的警告

c++ - 如何强制INTERFACE库上的依赖项使用C++ 11或更高版本?

c++ - "Multiple definition of"编写仅 header 模板库时出错

c++ - Incomplete parameter error Including postgres.cpp working file in other .cpp 文件

c++ - qt编程中未初始化的switchcase错误

c++ - 如何从被传递的对象中通过引用传递 self?

c++ - 可选的仅 header 库

c++ - 如何在场景中找到一个项目

c++ - 是否有一个类存储另一个类所需信息的设计模式,例如它的构造?

C++ header-only 模板库