c++ - 我应该在 .cpp 和 .h 中重复包含吗?

标签 c++ include software-design

场景:

foo.h:

#include <vector>

class foo {
  public:
  std::vector<int>* getVector();

  /* ... other methods declarations ... */

}

foo.cpp:

#include "foo.h"
#include <vector>

/* ... other methods definitions using std::vector ... */

std::vector<int>* foo::getVector() {
  return new std::vector<int>();
}

我希望 .cpp 独立于 header 中任何 future 可能的更改。如果由于某种原因类的接口(interface)发生变化并且依赖来自 <vector>可以消除,我冒着 .cpp 中的其他方法也会丢失该包含的风险。

重复包含 <vector> 是否正确?在.cpp 和.h 中?这种做法是否有意义,或者我应该只依赖标题中包含的内容?

最佳答案

只包含您需要的内容,仅此而已。

在多个 .h 文件和多个 .cpp 文件中包含相同的头文件本身并不是问题。 header 保护可有效缓解多次包含文件的问题。

如果您开始尝试避免多次包含同一个文件,它实际上可能是负面的,因为它通常会导致“大型包含文件”,其中包含您在整个项目中所需的一切。这很糟糕,因为对任何头文件的一次更改都会导致所有内容重新编译。

如果您担心 .h/.cpp 文件包含同一个文件,请遵循以下准则:

  • 如果头文件中不需要include,只在CPP中包含
  • 如果头文件中需要类声明(但未使用),请在 .h 文件中使用前向声明并将其包含在 CPP 文件中。
  • 如果您实际上在头文件中使用了包含,请将其包含在头文件中而不是 CPP 中。

关于c++ - 我应该在 .cpp 和 .h 中重复包含吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11639809/

相关文章:

javascript - AngularJs 加载需要的脚本

unit-testing - TDD:为什么是 'Red Green Refactor' 而不是 'Green Refactor' ?

java - 可维护、可扩展和模块化实际上意味着什么?

c++ - 在 C++ 中刷新套接字

c - 在没有包含防护的情况下避免重新声明错误

c++ - 如何在 Code::Blocks 中包含 "custom"库? (Windows 7的)

design-patterns - 函数式编程 : How to handle complex data without bloated functions?

c++ - c++ 中从 long 到 double 的静态转换与使用 double 构造函数有何不同?

c++ - 如何确保WSASend()会发送数据?

c++ - 从函数 c++ 返回后的错误值