如果我可以在.h文件中包含所有C++代码,为什么要使用.cpp文件?我的意思是.cpp文件是很奇怪的,如果所有代码都可以在.h文件中写入?任何人都可以清洁吗?
原因如下:
(1)增量构建时间
当项目变大时,管理构建时间是有问题的,特别是对于C++项目.在一次微小的改变后建立1或5分钟会产生很大的不同.大型项目的大多数变化很小,需要大量测试,这一点得到了强调.再加上TDD和重构的任何尝试,你是一个用西西里鞋的死slu ..
拆分成标题和正文,并将其移动到库可以极大地改善增量构建时间.
(2)静态
对于许多事情,你需要一个类型的单个实例,即
// .cpp
static Foo foo;
Run Code Online (Sandbox Code Playgroud)
没有办法(我知道)允许在仅头文件项目中使用它.编译器特定的解决方案是有限的,例如__declspec(selectany)在MSVC中仅限于POD类型.
(3)实现隐藏
.cpp/.h分离是将公共接口与实现细节明确分开的唯一方法.您可以将类成员放入一个private部分,但这对其他实体不起作用.(连头/体分离泄漏,除非你增加额外的技术,如PIMPL,所以这个说法是有点弱IMO,但同样,在一个大的项目我会深深地想念这个有效的,如果不完美的方法).
很棒的问题,无论如何 - 你已经认识到与C/C++构建模型存在某种冲突,我认为这是一个可怕含义的古老遗物.
您应该尝试在多大程度上推送"仅标题"模型(或者至少是"几乎只有标题",以允许静态).你可能会走得很远 - 听到那些尝试过的人也会很有意思.
可能值得尝试使用静态库来分离和封装实现,否则将所有代码保存在头文件中.我可以看到一些问题,但我们当前的运作方式是无故障的.