在类头和实现中包含头?

时间:2012-03-02 14:06:03

标签: c++

我有一个类Foo,带有相应的.h和.cpp。这两个文件都使用std :: string。我应该只在标题中#include <string>或将其包含在两个文件中吗?

3 个答案:

答案 0 :(得分:6)

如果标题可以使用前向声明,那么我总是在标题和实现文件中的#include中使用它。 (FD可用于参考和指针类型)。

如果他们都需要它,那么我倾向于将它们放在两者中,这样如果标题被更改,我可以从.h中删除它。

答案 1 :(得分:2)

我将<string>包含在预编译的头文件中,因为我不打算经常更改它:)。主要规则是:我不会经常更改的所有标题都包含在预编译的标题中:STD,系统标题,稳定的第三方库等(“通常”取决于项目大小,如果项目很大“通常”倾向于“从不”)。

对于我投票的其他标题@111111's answer

答案 2 :(得分:0)

如果你可以更好地使用前向声明,因为你避免多次包含,循环包含等。 因此,当您可以使用指针时,请放置一个前向声明,然后将该文件包含在.cpp中 在所有其他情况下,您被迫直接包含在.h上(当您不使用指针或引用时以及从类派生时)