在头文件和.cpp文件中编写C ++(大部分)
多年来,我一直以标准的方式编写C ++,在头文件.hpp中使用类声明,在源.cpp文件中使用函数定义。 最近我搬到了一家新公司,在那里代码(看起来受boost编码风格的影响)完全用.hpp文件编码,并带有一个简短的.cpp文件以包含头文件并创建对象/程序二进制文件。
它让我思考 - 在头文件中编写代码与编写每个对象的.hpp&.cpp文件相比,有哪些优势/弱点? 这假定我们的项目不会创建通用库,然后将其链接到程序二进制文件中,而是每个程序二进制文件都是由头文件(和一个源.cpp文件)的总和构建的。 这是C ++的新趋势吗?
例如,模板对象只需要是标头,但将非模板类放入头文件看起来不失为一个好主意,然后只需将这些常用项目类包含在二进制文件中即可。 假设你从头开始创建一个新的代码库,这是否意味着更少的链接,这可能意味着更少的链接错误和更快的构建。 预编译头文件还意味着使用头文件加快编译时间? 或者构建时间更长,因为我们现在需要在创建二进制文件时编译所有代码,而不是链接公共共享库对象?
另外请注意,我们并不是在这里编写一个API(在这种情况下,像pimpl成语这样的东西通过隐藏实现会给我们更多的灵活性),我们正在编写在客户站点上运行的程序。
提前致谢,
离开我的头顶:
优势:
弱点:
我确定还有其他人,如果我能再想一想,我会编辑。
只有头文件库倾向于使构建系统更容易,并且通常您需要不太关心依赖关系。
另一方面,将代码移到实现文件中可以更容易地控制模块边界并创建可交换的二进制模块,这可以提高增量构建。 成本更“家务”。 我的直觉是喜欢实现文件,并且有一些数据点支持我,例如来自Boost Networking Library的作者的博客文章。
通用库是一回事,代码的一般可重用性是另一回事。 如果你想使用你在另一个项目中编写的一些代码,你可能不得不复制大量的代码,然后维护独立的代码库。 编译时间会变得更长,因为程序将是一个大的编译单元,而不是许多cpp / h文件,其中只有包含修改过的头文件的这些文件才会被重新编译。 例如,我目前正在编写的应用程序的完整版本需要7分钟。 如果改变不严重,重新编译需要15秒。 最后,代码可能往往不易读。 头文件可让您快速浏览课程的创建内容以及如何使用它。 如果类是在现场编写的,则必须不必要地挖掘源代码。
链接地址: http://www.djcxy.com/p/85439.html上一篇: Coding C++ (mostly) in header files vs .cpp files
下一篇: Condensing Declaration and Implementation into an HPP file