gpt4 book ai didi

c++ - 在库的一个 header 中转发声明所有类是否有任何(除了显而易见的)缺点?

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:07 26 4
gpt4 key购买 nike

假设有一个大型项目,有很多类。在每个单独的 header 中添加和删除前向声明很繁琐,但却是必要的,因为包含每个 header 会显着减慢编译速度。

那么在一个特殊的前向声明列表头中保留一个库中所有类的列表,并将其包含在每个类头文件中是不是一个好主意?我知道的明显缺点是:

  • 当忘记在另一个类的实现中包含类 header 时,混淆编译器错误(主要是在 MSVC 上)。
  • 由于前向声明的列表可能很长,编译时间略有增加
  • 在添加/删除/重命名类时维护此列表。

最后一个应该是对需要精心维护每个单独类头中的前向声明的情况的改进。该系统的一个示例是例如 <iosfwd> Standard Library header .

这样的系统还有其他缺点吗?

最佳答案

每当添加/删除/重命名类时,都必须修改声明集合。修改将导致几乎整个项目被重建,而不仅仅是依赖于更改后的类名的翻译单元(因为所有标题和通过包含,所有翻译单元都包含它[除了那些不依赖于任何类的,我希望这很少见])。对于大型项目,这可能意味着增量构建时间从一分钟增加到几小时。这几乎是微不足道的。

一些稳定类的前向声明的集合,仅由依赖于相同(或至少相似)前向声明集的文件包含可能会有用。

关于c++ - 在库的一个 header 中转发声明所有类是否有任何(除了显而易见的)缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37407504/

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