C++,如果我需要它,我是否应该#include *和*它包含的其他东西?

C++, Should I #include something if I need it *and* something else it includes?

假设我有一个名为 foo.h 的头文件,它包含另一个头文件 bar.h

我还有一个名为 xyz.h 的头文件。需要foo.hbar.h,虽然foo.hbar.h没有任何关系,所以我觉得只是 包括 foo.h (仍然编译,因为它包括 bar.h...

因此,foo.h 包括 bar.hbar.h 包括 foo.h,但 xyz.h 是否包括 foo.hbar.h。这是不好的做法吗?我有什么理由不应该这样做吗?为什么我能做到这一点?

每个 header 应该是 self-contained。它应该包括它需要的所有其他 header,并且有 include guards

假设 header 不是独立的。然后,如果你想在不同的客户端中使用那个 header,那么新客户端甚至不会编译,除非你找到并拉动其他 headers 的需要。

在极少数情况下 header 文件可能不是 self-contained,例如查看 Google's code style 了解详细信息。

大多数编译器都支持包含依赖项调查的选项。 question.

中讨论了这些选项和其他工具