c – 前向声明的整个标题有什么用途?

我已经看到使用#include’d的前向头的代码,否则会有前向声明. “forward header”是指仅包含前向声明的标题.因此,如果class.h包含模板,那么您可能有class.cpp,class.h和class_fwd.h,或者只有class.h和class_fwd.h.

这方面的例子是Boost,它有一些file_fwd.hpp文件.

何时创建并包含一个优先于明确的前向声明的前向标题?什么时候不是?这种做法有哪些优点和缺点?是否应该为所有标题创建转发标头?

这个问题基本相同:

Forward declaration include, on top of declaration include (ClassFwd.h + Class.h)

为什么我在这个问题中找不到令人满意的答案:

>DanielLidström的回答描述了他所做的相关事情,但没有具体解决这个问题.
>塞巴斯蒂安的答案主要解释了为什么一般使用前向声明,然后评论类似于DanielLidström描述的模式.
> Dialecticus的答案含糊不清,但暗示模板是使用前向标题的理由.
>干杯和hth. – 阿尔夫的答案类似于Dialecticus的答案.

最佳答案 如果前向声明保存在标头中,则前向标头可以包含在主标头和/或实现文件中,以便编译器可以检查一个定义规则违规. (例如模板参数数量不匹配)

这实际上与实际定义函数时可以看到带有函数原型的头文件的原因相同.

此外,指南“不要重复自己”建议不要多次重复相同的声明.不是因为重复会浪费磁盘空间,或者甚至因为很难将更改传播到多个位置(虽然这经常被引用),但是为了防止存在不兼容版本的可能性.

点赞