使用场景
头文件A包含另一个头文件B, 是为了引入在头文件A中使用的类, 函数, 结构体, 枚举或其他实体的声明....一般来说, 只有在自己的类中将某个类的对象作为数据成员使用时, 或者需要继承某个类时, 才应该包含那个类的头文件. 传统上来说, 前置声明可以在下列情况下使用:
不需要知道类的大小....前置声明能够节省不必要的重新编译时间. #include使代码因为头文件中无关的改动而被重新编译多次.
缺点
前置声明隐藏关系, 头文件改动时, 用户代码会跳过必要的重新编译过程....前置声明来自命名空间std::的symbol时, 其行为未定义....前置声明了不少来自头文件的symbol时, 就会比单单一行的include冗长.