C++ 在任何头文件中只定义一个类而不包括包含此类的整个头文件的目的是什么?

C++ 在任何头文件中只定义一个类而不包括包含此类的整个头文件的目的是什么?,c++,C++,在任何头文件中只定义一个类而不包括包含此类的整个头文件的目的是什么 例如,我在一些头文件中发现了一些类声明,如: #include "blabla.h" #include "mehmeh.h" class myClass; /* Some code using myClass */ 使用这种声明的目的是什么 它被称为a,它允许您告诉编译器有一个具有该名称的类型,但头文件不需要知道该类型的详细信息 这减少了标题中的include并减少了编译时间。这是类的正向声明。它允许您定义指向所定

在任何头文件中只定义一个类而不包括包含此类的整个头文件的目的是什么

例如,我在一些头文件中发现了一些类声明,如:

#include "blabla.h"
#include "mehmeh.h" 
class myClass; 

/*

Some code using myClass 

*/
使用这种声明的目的是什么

它被称为a,它允许您告诉编译器有一个具有该名称的类型,但头文件不需要知道该类型的详细信息


这减少了标题中的include并减少了编译时间。

这是类的正向声明。它允许您定义指向所定义类的指针和引用,而无需引入整个定义

最重要的原因是,由于循环引用,您无法以任何其他方式执行此操作:

class Parent;
class Child {
    Parent *parent;      // Child must reference Parent
    string name;
};
class Parent {
    Child *children[32]; // Parent must reference Children
};

另一个原因是加速编译:包含一个大的头来声明指针可能会大大降低编译速度。

ISO/IEC 14882,1st,3.9.6:“已声明但未定义的类,或大小未知或元素类型不完整的数组,是未完全定义的对象类型…”。。。未完全定义对象类型的实例的大小和布局未知。”

K&R第二版,第212页:“类型不完整的对象。。。可在不需要其[具体]尺寸的情况下提及。”


适用于不透明指针、Cheshire Cat、pimpl等,或者任何不需要、不希望或甚至不可能取消引用的上下文。

提示:“感谢->高级主要好处是编译时间比包含标头要短,因为编译器知道标头存在,但不必填写所有不需要的细节。我对文本进行了编辑,以始终使用“声明”,而不是混合使用“声明”和“定义”。两者是相关的,但不能互换<代码>类MyClass是一个声明,而不是一个定义。