头文件并包含最佳实践

时间:2013-03-14 21:52:18

标签: c++ class header include

我有一个关于头文件,包含语句和良好编码风格的快速问题。假设我有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>

我知道&lt;&gt;中的include语句在Myprogram.cpp和Bar.hpp中,程序编译和运行不是必需的,但最佳做法或正确的做法是什么?有没有理由不在每个文件中明确包含必要的头文件?

2 个答案:

答案 0 :(得分:11)

应在每个需要它们的文件中包含所有必需的文件。如果MyProgram.cpp需要string,请加入Bar.hpp,而不是依赖于Bar.hpp。不能保证从现在起2周后<iostream>仍然会包含它,然后您将面临编译错误。

请注意必要的 - 即确保您确实需要一个包含,当一个前向声明或甚至完全退出时。

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

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

答案 1 :(得分:2)

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

例如,如果Foo.cpp需要Foo.h,而Foo.cpp不需要,请将其包含在Foo.h而不是using中。如果两者都需要,请包含在两者中。

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