如果我需要在标题中包含另一个标题,并且我计划在我的 CPP 文件中使用它,那么为了可读性,我是否也应该将其包含在那里

If I need to include another header in my header and I plan to use it in my CPP file, should I include it there as well for readability?

本文关键字:包含 标题 可读性 在那里 也应该 是否 CPP 另一个 计划 文件 如果      更新时间:2023-10-16

对,所以我会尽力解释我的问题。基本上在我的一个头文件中,我需要使用一个类,显然要做到这一点,我必须在当前文件中包含该类的标头。我只是在想,既然我计划稍后创建此类的新实例,我是否也应该将其包含在.cpp文件中以帮助提高可读性?我知道我不必这样做,但这样做有意义吗?还是我只是疯了?

示例 A,头文件:

include "APIManager.h"
class Environment
{
public:
    static void Initialize();
private:
    APIManager apiManager;
};

示例 A,源文件:

include "Environment.h"
// Should I include "APIManager.h" here too?
void Environment::Initialize()
{
}

尝试在这里寻找它,但我不确定如何措辞,所以如果已经问过这个问题,请道歉。

另外,通常是否应该在该类的标头中包含类的源所需的头文件?谢谢。

如果源文件是 Environment.cpp,您正在实现您在 Environment.h 中声明的内容,那么不,您不应该重新包含它。

另一方面,如果源文件是 SomeOtherFile.cpp您只是使用 Environment.h 中的声明,并且您将单独使用 APIManager.h 中的声明,并且独立于它们作为 Environment.h 的一部分的使用,那么是的,您应该这样做。您不希望将来的更改会从 SomeOtherFile 中删除#include <Environment.h>.cpp意外中断它。

换句话说,如果 SomeOtherFile.cpp 直接依赖于 APIManager.h,那么这种依赖性应该通过 #include 直接表达。

这基本上是一个风格问题,但是:

不,您不应该将其包含在 cpp 标头中。它过于冗长,没有人这样做。

我不会,除非#include "APIManager.h"可能不在标题中。

<string>可能包含在 <iostream> 中,但无论如何您都应该包含<string>,即使您的库包含它并且您使用<iostream>

在需要的地方包含标头。

如果您的类定义包括您要包含的标头中定义的对象,则应将它们包含在头文件中。 如果您只在 cpp 中使用标头的内容,请将其包含在 cpp 中。

切勿在 file.h 和 file 中包含相同的外部标头.cpp如果 file.cpp 还包括 file.h。