我现在正在重构我正在处理的 C++ 库(主要是遗留的),并且我正在尝试最小化包含指令和由这些包含产生的递归依赖性。 此外,为了使前向声明处理简洁明了,我在每个库中都维护了一个 fwd.h(就像 std 中的 iosfwd),这使库的客户生活更轻松
是否存在应优先于前向声明包含的情况(**当两种情况都编译时)?**
当前向声明更可取时,我对教科书解释不感兴趣。也许在某种程度上,前向声明(forward declaration)令人头疼。 std、boost 或其他完善的库中的策略是什么?
注意:我的编译器是 intel icc 12 - 只支持 C++03,只有很少的 C++11 特性,比如枚举的前向声明
ps:我已经解决了类似的讨论 - 似乎存在前向声明比包含更糟糕的情况 - 当删除不完整的不完整类型的对象时: [ C++ Class forward declaration drawbacks?
最佳答案
#include
永远不会比前向声明更好。在绝对必要时使用#include
。
而 #include
只有在需要完整的类型信息时才需要,例如在包含的类头文件中声明类成员或调用成员方法。在以下情况下不需要:
- 使用指针/引用作为类成员
- 在函数签名中(参数或返回类型)
关于c++ - 查找包含优于前向声明的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23393443/