在类标头和实现中包含标头

Including header in the class header and implementation?

本文关键字:包含标 实现      更新时间:2023-10-16

我有一个类Foo,它有相应的.h和.cpp。这两个文件都使用std::字符串。我应该在头中只包含#include <string>还是同时包含在两个文件中?

如果头可以通过前向声明逃脱惩罚,那么我总是在头中使用它,并在实现文件中使用#include。(FD可用于引用和指针类型)。

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

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

对于其他标题,我投票支持@111111的回答

如果可以的话,最好使用正向声明,因为可以避免多重包含、循环包含等。。因此,当您可以使用指针时,请提出前向声明,然后将该文件包含在.cpp中在所有其他情况下,您必须直接在.h上包含(当您不使用指针或引用并且从类派生时)