我可以在类 .h 文件或实现文件 .cpp 中定义类构造函数的主体。就特定项目中的编译器而言,这两种样式可能相同(对我来说,项目意味着 DLL )。这同样适用于任何成员函数:它们可以在头文件中定义,也可以在头文件中声明,然后在 cpp 文件中定义。
但是,我发现如果我需要在不同的项目中包含这样的类头文件(这意味着最终使用头文件的代码最终在不同的 DLL 中)那么在头文件中实际实现会引起一些头痛在编译时(不是在链接时……我什至没有达到这一点)。为什么?好吧,我不会详细说明,但是编译器显然会尝试解析可能在其他头文件等中定义的所有函数,从而迫使可怜的开发人员开始引入各种头文件等。
保持头文件没有任何实现并仅将它们用于“声明”不是总是最好的吗?这将使它们更容易包含在多个项目中,而不必携带大量额外的垃圾。
您对此有何看法?
原文由 Andrea 发布,翻译遵循 CC BY-SA 4.0 许可协议
要考虑的另一个注意事项:对头文件的任何更改都需要重新构建包含该头文件的所有文件。大多数构建系统将重建依赖于修改后的头文件的源 (*.cpp/.cc) 文件。
如果更改头文件中定义的类的方法,则包括头文件在内的所有源文件都将被重建。如果您更改源文件中的方法,则仅重建源文件。这可能是大中型项目的问题。
为了简化构建过程,类的大多数方法都应该在源文件中定义。小方法和其他内联候选应该在头文件中定义。