gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:00 26 4
gpt4 key购买 nike

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

如我所见,使用一个大头文件:

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

这是个好主意吗?

最佳答案

我会说一般这是一个坏主意,原因有几个:

  • 它给你的封装很差:客户应该只提取他们需要的 header 。通过这种方法,包含将引入所有内容,正如 Alok 提到的那样,这将增加构建时间和对重建的敏感性
  • 接口(interface)类和实现类之间没有区别,即您的库的客户使用的那些和客户不需要(也许不应该)看到的本库内部使用的那些
  • 如果您的任何 header 定义了宏,那么这些宏现在可能会“泄漏”到包含该 header 的任何其他代码中,这可能是不可取的。任何曾经不得不输入 #undef MIN 的人都会知道这种痛苦。
  • 如果您有多个需要相互了解的类,则可能会出现递归包含,因此它可能对包含顺序敏感,否则您将获得包含循环

我认为尽管有一种情况可能是可以接受的,那就是如果您的库仅提供一些旨在由客户调用的类/函数,而其余所有只是实现所使用的内部类。因此,客户只需包含 mylib.h 即可,这就是他们需要担心的全部。如果您想将库编译为静态库,这也会让事情变得更容易,因为您只需分发库和一个 header 即可。

关于c++ - 使用一个大包含文件的优点/缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14119371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com