header将文件包含在.cpp而不是包含在中的构建好处是什么.h?这如何影响构建时间以及它的优缺点是什么?
我曾经认为header,根据所有的规范,它们应该只包含在头文件中。(作为一种选择,以便.cpp文件保持干净并且可以在一个地方看到所有导入)
例子:
A.h:
inline void in_func(){}
B.h
#include "A.h" ???
class B {
public:
void func();
};
B.cpp:
#include "B.h"
#include "A.h" ???
void B::func()
{
in_func();
}
简单的例子:
假设您的头文件中有一个函数原型:
让
cpp.我们像这样定义它:然后你必须连接 and
<set>和<sstream>。如果您在 main.cpp 中不使用此功能,则不需要外部链接,因此<set>不<sstream>包含文件,并且在较窄的空间中执行名称搜索。当然,如果您在 cpp.xml 中包含标头,则在构建速度方面会有优势。因为如果它们只包含在其他标题中,那么就会有很多不必要的包含。一个标题将包含在另一个标题中,另一个标题将包含在五个标题中,这五个标题将包含在十个标题中,依此类推,直到所有标题都包含在所有标题中。在这种情况下,装配速度会因以下事实而降低:
实际上,您需要在 cpp 中包含标头不是为了加快组装速度,而是为了区分可见性和结构化。在实践中,实体的范围尽可能小是可取的,理想情况下只在需要的地方。这使它们更易于管理。C++ 中的作用域主要是在标题的帮助下进行管理的。在开发过程中,如果需要包含某种header,不必急于求成,你需要看看为什么会出现这种需要,可能项目结构不是很好。
标头应被视为 cpp 文件内容的接口,它应仅包含使用 cpp 功能所需的内容。