在类声明/定义中包含标头

Luc*_*ore 6 c++

我知道你可以这样做:

def.h:

A();
int x;
Run Code Online (Sandbox Code Playgroud)

class A
{
public:
#include "def.h"
}
Run Code Online (Sandbox Code Playgroud)

A.cpp

A::A()
{
    x = 0;
}

int main()
{
    A a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:你为什么要这样做?有什么好处吗?我可以看到如果你有一些具有相同成员但不是相同基础的类会有什么帮助,但是值得麻烦吗?它不是很易读,是吗?另外,编译器如何处理这些包含?它只是将标题的内容粘贴到它所包含的内容(有点像宏)吗?

Set*_*gie 2

预处理器(在任何内容之前运行),当它偶然发现 时include,几乎会逐字复制该标头的内容并将其粘贴到指令的位置#include

像您所描述的那样使用它的优点很少,主要的一个是您不必重复代码。

然而,在 9999/10000 的情况下,这绝对不值得这么麻烦。如果头文件中的某个地方有拼写错误,那么在使用它的每个文件中都会出现奇怪的错误,并且在您实际打开文件并读取它之前根本不清楚它在做什么。

如果可能的话,避免这种情况。我想不出有什么情况是绝对有必要的;大多数时候可以通过继承或组合实现相同的效果,而不会产生任何副作用。