使用一个大包含文件的优点/缺点

Pet*_*ter 1 c++ include header-files

我有一个个人项目,我怀疑它会超过20对header/cpp文件.我想知道让每个头文件和cpp文件包含它需要的其他文件(或使用前向声明)是否更好,或者让每个文件都包含"Includes.hpp",后者又包括所有标准库,给出每个类的前向声明,然后包括我的所有其他标题.

我可以看到,使用一个大头文件:

  • 清理一切
  • 使从其他目录中包含这些文件变得更容易(因为您只需要导航到使用一个文件,然后链接所有其他文件)
  • 将包括每个编译的所有文件,考虑到这是一个小项目,不是一个缺点,因为我将使用所有的文件

这是一个好主意吗?

the*_*ill 5

我会说,总的来说这是一个坏主意,原因有以下几点:

  • 它给你很差的封装:客户端应该只需要拉入他们需要的头文件.通过这种方法,包含将引入所有内容,正如Alok所提到的那样,将增加构建时间和对重建的敏感性
  • 接口类和实现类之间没有区别,即库的客户端使用的类和客户端不需要(也许不应该)看到的库内部使用的类.
  • 如果您的任何标头定义了宏,那么这些可能会"泄漏"到包含标头的任何其他代码中,这可能是不合需要的.任何曾经不得不打字的人#undef MIN都会知道这种痛苦.
  • 如果你有几个需要彼此了解的类,那么有可能是递归包含,所以它可能对包含的顺序很敏感,或者你会得到包含周期

我认为虽然有一个实例可以接受,但是如果你的库只提供了一些打算由客户端调用的类/函数,那么其余只是实现使用的内部类.所以客户可以只包括mylib.h,这就是他们需要担心的一切.如果您想将库编译为静态库,这也可以更容易,因为您可以只分发库和一个标头.