我可以免除C ++头文件吗?

时间:2015-05-26 23:02:38

标签: c++

如果我写一个没有前向声明的课程,为什么我需要将它分解为.h和.cpp?使用内联声明并将其全部保存在一个文件中只是包含我需要它的位置有什么不对吗?

2 个答案:

答案 0 :(得分:6)

内联所有内容的一个问题是,每当您更改实现时,您的类的所有客户端都必须重新编译。如果您将实现放在.cpp文件中,则只有.cpp必须重新编译(并链接),前提是您不更改接口(即头文件)。

这个问题在大型C ++项目中变得严重,这就是PIMPL idiom被发明的原因。

答案 1 :(得分:3)

没有任何错误,从语言的角度来看,它是完全合法的。虽然,它带来了成本。每次重新编译项目时都必须解析和处理文件。对于大型项目来说,这是一个严重的问题。

引入了pimpl习语(基于前向声明)以减少大型项目的编译时间。标准库中甚至有一个例子,即iosfwd

另一方面,有些情况下所有内容都在标题中。这是因为几乎所有模板都必须放在标题中。此外,模板给编译器带来了相当大的性能压力,有很多逻辑正在进行中。尽管如此,基于模板的标题库仍然有很多例子,例如Eigenboost的大部分。