今天,一位同事在向前声明标题中的一个类之前询问是否存在#include标题的技术原因。具体来说,我对#includes
本身的顺序或forward declare
vs #includes
的优点不感兴趣,但出于任何技术原因,一个订单优先于另一个订单。
示例:假设companions.h
是正确的,因为它需要donna.h
而clara.h
为#include
且CSpaceTimeContinuum
和CTardis
可以转发声明。 #include然后转发声明是否更好?
// companions.h
#include "donna.h"
#include "clara.h"
class CSpaceTimeContinuum;
class CTardis;
或转发声明然后#include? p>
// companions.h
class CSpaceTimeContinuum;
class CTardis;
#include "donna.h"
#include "clara.h"
如果没有技术差异而且它只是一种风格的东西,我也很乐意了解它。谢谢!
答案 0 :(得分:3)
首先是标题,然后是前进声明。否则,您冒着不必要的依赖性,例如,每当您包含donna.h时,您都需要重复前向声明(因为您无意中引入了对它的需要)。
答案 1 :(得分:0)
"donna.h"
和"clara.h"
应该构建,因此它们不依赖于外部前向声明,这只留下了CSpaceTimeContinuum
和{{1}之间可能发生冲突的一种实际可能性。在任何这些文件中声明并在本地源中使用这些类。根据行的顺序,唯一的区别就是在发生碰撞时进行诊断。