我试图find这个使用SO的答案。 有很多问题列出了在c ++中构build一个仅包含头文件的库的各种利弊,但是我还没有能够find一个可以量化的文件。 那么,以可量化的术语来说,使用传统分离的c ++头文件和实现文件与头文件仅有区别? 为了简单起见,我假设不使用模板(因为它们仅需要标题)。 详细说明一下,我列举了我从文章中看到的利弊。 显然,有些是不容易量化的(如易用性),因此无法进行量化比较。 我会标记那些我期望可以量化的指标(可量化的)。 优于头只 包含更容易,因为您不需要在构build系统中指定链接器选项。 因为库的函数在你的代码中被内联,所以你总是使用与其他代码相同的编译器(选项)来编译所有的库代码。 这可能会快很多。 (定量的) 可以给编译器/链接器提供更好的优化机会(如果可能的话,解释/量化) 如果您使用模板,则是必需的。 缺点仅用于标题 它膨胀了代码。 (可量化的)(如何影响执行时间和内存占用) 更长的编译时间。 (定量的) 界面和执行的分离失去。 有时会导致难以解决的循环依赖。 防止共享库/ DLL的二进制兼容性。 这可能会加剧那些喜欢使用C ++的传统方式的同事。 任何你可以从更大的开源项目中使用的例子(比较相似大小的代码库)都会非常感激。 或者,如果您知道可以在标题和分隔版本之间切换的项目(使用包含两者的第三个文件),那么这将是理想的。 轶事数字也是有用的,因为他们给我一个球场,我可以得到一些见解。 利弊来源: https://stackoverflow.com/a/6200793/278976 https://stackoverflow.com/a/1783905/278976 提前致谢… 更新: 对于任何可能稍后阅读并有兴趣获得关于链接和编译的背景信息的人,我发现这些资源是有用的: http://www.amazon.com/Computer-Systems-Programmers-Perspective-Edition/dp/0136108040第7章 http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html http://www.cyberciti.biz/tips/linux-shared-library-management.html 更新:(回应下面的评论) 只是因为答案可能会有所不同,并不意味着测量是无用的。 你必须开始测量某个点。 而你有更多的测量,图片更清晰。 我在这个问题上要求的不是全部,而是一幅画面。 当然,任何人都可以用数字来歪曲论点,如果他们想不道德地推动他们的偏见。 但是,如果有人对两种select之间的差异感到好奇,并公布这些结果,我认为这些信息是有用的。 没有人对这个话题感到好奇,足以衡量它吗? 我喜欢这个枪战项目。 我们可以从删除大部分variables开始。 在一个版本的linux上只能使用一个版本的gcc。 只对所有基准使用相同的硬件。 不要用多个线程编译。 那么,我们可以衡量: 可执行大小 运行 […]
什么是只有头文件库的好处,你为什么要这样写反对将实现分为单独的文件?