【C++】前向声明(Forward Declaration)
前向声明(Forward Declaration)是在C、C++等编程语言中,在使用一个类、结构体或其他类型之前,仅声明其名称而不给出完整定义的一种方式。
作用
- 减少编译依赖:当一个源文件包含大量头文件时,编译时间会显著增加。使用前向声明,只需让编译器知道某个类型的名字存在,而不必包含其完整定义的头文件。例如在代码中如果仅需要使用指针或引用指向某个类,而不需要访问该类的成员,就可以用前向声明,避免包含该类完整定义的头文件,从而减少编译时需要处理的代码量,加快编译速度。
- 避免头文件循环包含:在多个类相互引用时,容易出现头文件循环包含问题(例如A类头文件包含B类头文件,B类头文件又包含A类头文件),这会导致编译错误。前向声明可以打破这种循环依赖,在不需要完整类定义的地方,使用前向声明来表示类的存在,解决循环包含问题。
示例
在C++中:
// 前置声明类B
class B;
class A {
public:
// 这里仅使用B*指针,不需要B的完整定义
void doSomething(B* b);
};
// 类B的完整定义
class B {
public:
void someFunction();
};
void A::doSomething(B* b) {
// 这里只是简单使用指针,没有访问B的成员
// 如果要访问B的成员,就需要包含B的完整定义
}
在上述代码中,class B;
就是前向声明,在定义 A
类时,不需要包含 B
类的完整定义,仅告知编译器 B
类是存在的,就可以使用指向 B
类对象的指针。
QT中的例子
比如在QT的一个头文件中,我这里不想把include写到头文件中,所以这里用到了前向声明,然后再.C文件中再引用头文件: