找到一个包含优于转发声明的用例 我现在正在重构我正在处理的C++库(主要是遗留),我试图最小化包含这些指令的包含指令和递归依赖。 另外,为了使转发声明处理变得简洁和容易,我在每个库中维护了一个fwd.h(如std中的iosfwd),这使库的客户机的生活更轻松

找到一个包含优于转发声明的用例 我现在正在重构我正在处理的C++库(主要是遗留),我试图最小化包含这些指令的包含指令和递归依赖。 另外,为了使转发声明处理变得简洁和容易,我在每个库中维护了一个fwd.h(如std中的iosfwd),这使库的客户机的生活更轻松,c++,include,dependencies,forward-declaration,C++,Include,Dependencies,Forward Declaration,是否有一种情况下,include应该优先于forward声明(**当两种情况都编译时)** 我对课本解释不感兴趣,最好是提前声明。也许在某一时刻,提前声明是令人头疼的。 std、boost或其他成熟图书馆的策略是什么 注意:我的编译器是“英特尔icc 12”-仅支持C++03,并具有很少的C++11功能,例如枚举的前向声明 ps:在删除不完整类型的对象时,我已经进行了类似的讨论——似乎有一种情况下,转发声明比包含更糟糕: [只有当代码无法编译时才使用!始终使用并在可能的情况下重构代码,以便在#i

是否有一种情况下,include应该优先于forward声明(**当两种情况都编译时)**

我对课本解释不感兴趣,最好是提前声明。也许在某一时刻,提前声明是令人头疼的。 std、boost或其他成熟图书馆的策略是什么

注意:我的编译器是“英特尔icc 12”-仅支持C++03,并具有很少的C++11功能,例如枚举的前向声明

ps:在删除不完整类型的对象时,我已经进行了类似的讨论——似乎有一种情况下,转发声明比包含更糟糕:
[

只有当代码无法编译时才使用!始终使用并在可能的情况下重构代码,以便在
#include
上使用前向声明。

#include
永远比前向声明好。在绝对必要时使用
#include
。 只有在需要完整的类型信息(如在包含的类头文件中声明类成员或调用的成员方法)时,才需要
#include
。在以下情况下,不需要该信息:

  • 使用指针/引用作为类成员
  • 函数内签名(参数或返回类型)

  • 我认为每个人都会更乐意使用build server park,而不是费力地维护手动转发声明。从长远来看,可能也会更便宜。问题是,在技术上没有必要的情况下,转发声明的工作量是否会比包含的工作量少,标准库中有
    ,这就是所有不应该是
    ?@ChristianHackl:yes.dng.:)只是不要为了避免在头文件中使用#include而将某个对象设为指针成员变量,我不会严格遵守这条规则。示例:不包括,即使它是共享ptr功能的重要组成部分。@DieterLücking:我不明白这与答案有什么关系。他说“当这是绝对必要的时候”.想详细说明吗?@Rakibul Hasan您没有回答这个问题。我没有问什么时候应该优先使用前向声明,也没有给出一些琐碎的例子。@hellfire769换句话说:
    #include
    永远都比前向声明好,只在需要时使用
    #include
    ,并且尽可能地去掉任何东西。