先申报或#include?

时间:2015-04-13 13:36:40

标签: c++ header-files forward-declaration

今天,一位同事在向前声明标题中的一个类之前询问是否存在#include标题的技术原因。具体来说,我对#includes本身的顺序或forward declare vs #includes的优点不感兴趣,但出于任何技术原因,一个订单优先于另一个订单。

示例:假设companions.h是正确的,因为它需要donna.hclara.h#includeCSpaceTimeContinuumCTardis可以转发声明。 #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"

如果没有技术差异而且它只是一种风格的东西,我也很乐意了解它。谢谢!

2 个答案:

答案 0 :(得分:3)

首先是标题,然后是前进声明。否则,您冒着不必要的依赖性,例如,每当您包含donna.h时,您都需要重复前向声明(因为您无意中引入了对它的需要)。

答案 1 :(得分:0)

"donna.h""clara.h"应该构建,因此它们不依赖于外部前向声明,这只留下了CSpaceTimeContinuum和{{1}之间可能发生冲突的一种实际可能性。在任何这些文件中声明并在本地源中使用这些类。根据行的顺序,唯一的区别就是在发生碰撞时进行诊断。