6

我有一个关于头文件、包含语句和良好编码风格的快速问题。假设我有 2 个具有关联源文件和头文件的类,然后是 main() 所在的最终源文件。

在 Foo.hpp 我有以下语句:

#include <string>
#include <iostream>
#include <exception>

现在有了 Bar.hpp 我有以下陈述:

#include "Foo.hpp"
#include <string>

最后与 Myprogram.cpp 我有以下陈述:

#include "Bar.hpp"
#include <string>
#include <iostream>
#include <exception>

我知道 Myprogram.cpp 和 Bar.hpp 中的 <> 中的包含语句对于程序编译和运行来说不是必需的,但是最佳实践或正确的做事方式是什么?是否有任何理由不在每个文件中明确包含必要的头文件?

4

2 回答 2

11

应该在每个需要它们的文件中包含所有必要的文件。如果MyProgram.cpp需要string,请包含它,而不是依赖它被Bar.hpp. 不能保证 2 周后Bar.hpp仍会包含它,然后您将遇到编译器错误。

请注意必要的- 即确保您确实需要一个包含,当一个前向声明甚至完全忽略它时会这样做。

另外,请注意,某些系统标头可能包含其他标头 - 除了少数例外,没有要求。因此,如果您需要两者<iostream><string>包含两者,即使您只能使用其中之一进行编译。

包含出现的顺序(系统包含与用户包含)取决于您遵循的编码标准 - 一致性比选择本身更重要。

于 2013-03-14T21:56:00.843 回答
2

在每个文件中包含您需要的所有内容,但不要包含您不需要的任何文件。通常,包含文件的工作是确保它没有被包含两次,使用预编译器标志等......

例如,如果需要Foo.cpp,但不需要Foo.h,则将其包含在Foo.cppnot in 中Foo.h。如果两者都需要,则两者都包含。

切线,作为最佳实践,永远不要using在头文件中使用指令。如果需要,可以using在实现文件 (.cpp) 中使用指令。

于 2013-03-14T21:57:14.757 回答