先转发声明还是#include?

Forward declare or #include first?

今天,一位同事询问在 header 中转发声明 class 之前是否有#include headers 的技术原因。具体来说,我对 #includes 本身的顺序或 forward declare#includes 的优点不感兴趣,但出于任何技术原因,一个顺序优于另一个。

示例:假设 companions.h 是正确的,因为它要求 donna.hclara.h#include 并且 CSpaceTimeContinuumCTardis 可以提前宣布。 #include 然后转发声明更好吗?

// companions.h
#include "donna.h"
#include "clara.h"
class CSpaceTimeContinuum;
class CTardis;

或转发声明然后#include?

// companions.h
class CSpaceTimeContinuum;
class CTardis;
#include "donna.h"
#include "clara.h"

如果没有技术上的差异,只是风格上的差异,我也很乐意学习。谢谢!

总是先headers,然后向前声明。否则,您将面临不必要的依赖性风险,例如,每当您包含 donna.h 时,您都需要重复前向声明(因为您无意中引入了对它的需求)。

"donna.h""clara.h" 应该构造成不依赖于外部前向声明,这只留下一个实际可能性,即 CSpaceTimeContinuum 和 [= 之间可能发生冲突13=] 在任何这些文件中声明,以及您在本地源中使用那些 类。行顺序的唯一区别是发生冲突时的诊断。