C++ 包含 header /前向声明顺序

标签 c++ include forward-declaration

<分区>

已经讨论过一个类似的问题 ( C/C++ include header file order ),但是这个线程没有提到前向声明。如果我总结一下到目前为止我在网上阅读的内容:

  1. 每个人都同意 .cpp 文件的相应 header 应该放在第一位。这可确保头文件包含所需的一切。

  2. 除此之外,似乎没有达成共识。 Google 指南 ( https://google.github.io/styleguide/cppguide.html) 建议包括来自系统 -> 其他库 -> 项目的 header 。 SO 上的许多人提出了完全相反的建议。这似乎是个人喜好的问题。

关于前向声明,是否有任何理由将它们添加到包含 header 之前/之后?我不明白为什么这很重要 ( Is a class declaration allowed after a class definition? ),但也许我遗漏了什么。

最佳答案

我认为这是没有正确答案的问题之一。

我从封装的角度考虑它(并且它绝不是绝对答案)的方式,因此我倾向于做与谷歌指南相反的事情:

  • 如果您首先包含您的项目 header ,您就不太可能遇到 header 依赖于它之前出现的某些系统包含的问题,因为您只会遇到编译错误...所以我发现您看到了问题将系统包含在最后会更快。

  • 对于前向声明也是如此 - 如果您需要它们并且它们不是由标题提供的 - 然后在包含之后添加它们,因为标题不应该需要它们(否则它会在标题中)等等你只在需要时声明它......

这或多或少是我的推理 - 但正如我所说,如果您的 header 设计正确,那么您可以采用任何一种方式...

关于C++ 包含 header /前向声明顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56364484/

相关文章:

php - javascript中自动递增名称和ID

c++ - Zebra KBTools MC92N0 键盘重新映射 C++ -- "error.h"没有这样的文件或目录

c++ - 拆分函数的声明和定义,还是删除函数头中的新运算符?

C++ 对象的前向声明

c++ - 成员函数模板放在哪里

c++ - 如何使 Qt Creator 在没有返回语句时显示错误

C++,set_terminate 是每个线程的本地吗?

c++ - MSB6004 指定的任务可执行位置 "\rc.exe"无效

c++ - 使用智能指针和继承构造函数的前向声明

c++ - 在头文件中声明 Qt 类