在类标头和实现中包含标头
Including header in the class header and implementation?
我有一个类Foo,它有相应的.h和.cpp。这两个文件都使用std::字符串。我应该在头中只包含#include <string>
还是同时包含在两个文件中?
如果头可以通过前向声明逃脱惩罚,那么我总是在头中使用它,并在实现文件中使用#include。(FD可用于引用和指针类型)。
如果它们都需要,那么我倾向于将它们放在两者中,这样,如果头被更改,我就可以将其从.h中删除。
我将<string>
包含在预编译头中,因为我不打算经常更改它:)。主要规则是:我不会经常更改的所有头都包含在预编译头中:STD、系统头、稳定的第三方库等("经常"取决于项目大小,如果项目很大,"经常"往往是"从不")。
对于其他标题,我投票支持@111111的回答
如果可以的话,最好使用正向声明,因为可以避免多重包含、循环包含等。。因此,当您可以使用指针时,请提出前向声明,然后将该文件包含在.cpp中在所有其他情况下,您必须直接在.h上包含(当您不使用指针或引用并且从类派生时)
相关文章:
- 在CMake中使用find_package时,是否会显式包含标头
- GCC 包含标头(使用"-include")CMake 未检测到的更改
- 使用预处理指令检查是否包含标头?
- 更智能地在C++中包含保护,以便在不同的命名空间中多次包含标头
- 如何在 c++ 中有条件地包含标头?
- main.cpp 如何知道包含标头的源文件?
- 有没有办法告诉 g++ 编译器,而不是在某个 -I 路径中查找包含标头
- QT 如何包含标头和 cpp 文件
- 在 c++ 中,如果包含标头,为什么我会收到'does not a name of type'错误?
- CLion 无法解析类型 std::unordered_map,即使它提示我包含标头并且编译工作
- 是否可以链接到,包括和使用静态库,而无需额外包含标头/文件
- 为什么包含标头会导致"use of auto before deduction of auto"错误?
- 如何告诉qmake在从dbus xml生成文件时包含标头
- GCC Bug,使用尖括号通过宏包含标头时"linux"路径中的字符串"<>"替换为 "1"
- 如何从平台SDK明确包含标头文件
- 包含标头中的搜索路径因编译器而异
- #include < Dbghelp.h> 不包含标头
- 在 main.cpp 以外的文件中包含标头时出现链接器错误
- 仅在接口中包含标头,而不在实现中包含标头
- 在类标头和实现中包含标头