优缺点
优点
1.c++前置声明,可以节约预处理器的展开时间,也就是在编译的时候速度是增快了,但是伴随着很多坑。
2.当被前置声明的类改动后,只需要编译包含改动类头文件的源文件,所有使用了前置声明的源文件不需要改动
体现
1.所有引用TestB.h 的其他 .cpp文件不用再去包含 tem_A 与 Util 这俩个类的头文件,这俩个类的文件TestB.cpp 会包含。其他的.cpp 文件只需链接TestB.o 文件即可。这样有多少个使用到Test_B的源文件就会省多少次相应的头文件展开。
2. 如果Util 与 tem_A 的头文件发生变化,只需要Test_B 重新编译即可,其他用到Test_B的源文件不需要重新编译,只需链接新的Test_B.o 即可。
#ifndef TEST_B_H
#define TEST_B_H
template<class T>
class tem_A;
class Util;
class B {
public:
B()
{}
private:
tem_A<Util>* handle;
};
#endif //TESTB_H
缺点
1.可能引发bug
struct B {};
struct D : B {};
// good_user.cc:
#include "b.h"
void f(B*);
void f(void*);
void test(D* x) { f(x); } // calls f(B*)
//good_user.cc:
struct D;
void f(B*);
void f(void*);
void test(D*x)
{
f(x); //