先转发声明还是#include?
Forward declare or #include first?
今天,一位同事询问在 header 中转发声明 class 之前是否有#include headers 的技术原因。具体来说,我对 #includes
本身的顺序或 forward declare
与 #includes
的优点不感兴趣,但出于任何技术原因,一个顺序优于另一个。
示例:假设 companions.h
是正确的,因为它要求 donna.h
和 clara.h
为 #include
并且 CSpaceTimeContinuum
和 CTardis
可以提前宣布。 #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=] 在任何这些文件中声明,以及您在本地源中使用那些 类。行顺序的唯一区别是发生冲突时的诊断。
今天,一位同事询问在 header 中转发声明 class 之前是否有#include headers 的技术原因。具体来说,我对 #includes
本身的顺序或 forward declare
与 #includes
的优点不感兴趣,但出于任何技术原因,一个顺序优于另一个。
示例:假设 companions.h
是正确的,因为它要求 donna.h
和 clara.h
为 #include
并且 CSpaceTimeContinuum
和 CTardis
可以提前宣布。 #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=] 在任何这些文件中声明,以及您在本地源中使用那些 类。行顺序的唯一区别是发生冲突时的诊断。