C++前置声明与头文件使用

什么是前置声明

前置声明(Forward declaration)是尚未给出完整定义前针对类型、变量或者函数的声明

前置声明用来告诉编译器,我有这个东西,但是这个东西具体是什么样子的,我现在还不知道。

何时用前置声明

  1. 调用函数前必须针对函数进行声明。
  2. 如果一个类仅仅是使用了指针,或者作为返回类型,而没有访问具体的类成员,那么使用前置声明,不使用头文件,因为指针所占空间大小是确定的,编译器可以提前获知。

同理,如果需要访问具体类成员,那么就必须给出具体定义,所以这种情况下只能使用头文件,而不能用前置声明。

1
2
3
4
5
class Enemy;  
class Level {
public:
Enemy e;
};

上面的代码如果不包含头文件会报错,如果修改的话我们可以引入头文件,也可以使用指针代替。

1
2
3
4
5
class Enemy;  
class Level {
public:
Enemy *e;
};

头文件使用原则

  1. 尽可能避免包含头文件,因为可能增加编译时间,尽量用引用或指针代替
  2. 尽可能在.cpp文件中包含头文件而不是.h文件中,在.cpp文件中的头文件只有当文件被编译时才会被included,而在.h文件中的头文件会被每一个包含该头文件的文件使用。

参考文献

0%