4

如果我有一段代码,说main.cpp需要定义的类然后在文件中myheader.h包含所有所需的库/头文件是不好的做法吗?main.cppmyheader.h

如果是这样,为什么?考虑到main.cpp没有myheader.h任何办法是行不通的。

对不起,如果这个问题有点简单 - 我只是不确定分隔多个文件的常见做法。

4

2 回答 2

7

通常,您应该只包含当前文件中需要的那些内容。好的,所以无论如何都要main.cpp使用myheader.h,那么为什么不包括,比如说,<iostream>以及其他myheader.h需要的标题main.cpp?因为明天您将要包含哪些不需要或包含myheader.h在中的其他头文件,这是多余的并且会增加编译时间。因此,无论在 中需要什么,都包括在 中。myOthercpp.cpp<iostream>myheader.hmain.cppmain.cpp

这种模式有一个例外,称为预编译标头

于 2012-04-26T09:38:10.053 回答
0

有例外,但通常最好不要在标题中包含标题。

编译速度

例如,如果你有一个大图书馆 biglibrary.cpp / biglibrary.h

一个依赖大库做一些工作的类 myclass.h / myclass.cpp

还有一些依赖于 MyClass 的代码 - main.cpp


main.cpp 不依赖于 biglibrary。它不需要知道任何事情。它只取决于 myclass.h。如果 myclass.h 包含 biglibrary.h 则编译 main.cpp 必须解析 biglibrary.h 以及减慢编译速度。

循环依赖

另一个问题是循环依赖。假设您有 2 个类 A、B。A 引用 B 和 B 引用 A

你是在 bh 中包含 ah 还是在 ah 中包含 bh

一个更简洁的解决方案是只在源文件中包含您需要的标头。

如果标头中的代码需要对不存在的类的引用,请使用如下所示的前向减速:http ://www.eventhelix.com/realtimemantra/headerfileincludepatterns.htm

于 2012-04-26T09:54:10.980 回答