C语言中include指令和前向声明之间的区别

前端之家收集整理的这篇文章主要介绍了C语言中include指令和前向声明之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须重构一个旧代码.它的一个问题是它超过了无用的“包括”.在同一个项目中,我看到了以下语法:
#include <AnyClass> //A system header
#include "AnotherAnyClass" //A application header

class AnotherClass;

class Class : public OneMoreClass
{

public:
    explicit Class();
    ~Class();

private:
    AnotherClass *m_anotherClass;

}

我想弄明白:

>“包含”类“和”类类“之间有什么区别?
>何时应该使用第二种方法以及如何使用?

解决方法

这是两件不同的事情:
#include <AnyClass>

这是标题(或任何类型的文本)文件的常规包含.它等同于在您键入包含指令的位置粘贴AnyClass文件内容(这就是为什么包含保护和/或编译器编译指示通常用于防止同一文件中的多个包含).

这个语法:

class AnotherClass;

是一个forward declaration,它告诉编译器存在AnotherClass类.它在许多场景中都很有用,例如假设你有两个类,每个类需要一个指向另一个的指针:

class ClassB {
    ClassA* pointer_to_classA;
};
class ClassA {
    ClassB* pointer_to_classB;
};

上面的代码生成一个错误:“错误:未知类型名称’ClassA’”因为您使用了ClassA类型而编译器不知道它是什么(还).编译器的解析器在解析类声明的开头时只能了解ClassA的存在.

要完成上述工作,您需要一个前瞻性声明:

class ClassA; // A ClassA type exists

class ClassB {
    ClassA* pointer_to_classA;
};
class ClassA {
    ClassB* pointer_to_classB;
};

猜你在找的C&C++相关文章