头文件和包含最佳做法
我有一个关于头文件,包含语句和良好编码风格的简短问题。假设我有2个关联了源文件和头文件的类,然后是main()所在的最终源文件。头文件和包含最佳做法
在Foo.hpp我有以下语句:
#include <string>
#include <iostream>
#include <exception>
现在withing Bar.hpp我有以下语句:
#include "Foo.hpp"
#include <string>
最后withing Myprogram.cpp我有以下语句:
#include "Bar.hpp"
#include <string>
#include <iostream>
#include <exception>
我知道包括在<>在Myprogram.cpp和Bar.hpp中不是程序编译和运行所必需的,但最佳实践或正确的做事方式是什么?是否有任何理由不在每个文件中明确包含必要的头文件?
你应该包括所有必要的文件在每个需要它们的文件中。如果MyProgram.cpp
需要string
,请将其包括在内,而不要依赖于Bar.hpp
。从现在开始Bar.hpp
仍然包含它,不保证2周,然后您将留下编译器错误。
注意必要 - 即确保您实际上需要一个包含,当一个前向声明或甚至完全离开它将做。
此外,请注意,某些系统标题可能包含其他 - 除少数例外情况外,没有要求。因此,如果您同时需要<iostream>
和<string>
两种版本,即使只能使用其中一种进行编译。
包含出现的顺序(系统包含vs用户包含)取决于您遵循的编码标准 - 一致性比选择本身更重要。
但是反过来也是如此,除非你确实需要它们(即不要包含),否则你不应该包含头文件(在头文件中)。 – 2013-03-14 21:57:44
@LokiAstari true。 – 2013-03-14 22:00:29
有道理。谢谢。 – boulderprog 2013-03-14 22:07:08
包含您在每个文件中需要的所有文件,,但不包含任何不需要的文件。通常情况下,它是包含文件的工作,以确保它不包含两次,使用预编译的标志,等...
例如,如果是由Foo.cpp
需要的,而不是由Foo.h
,包括它在Foo.cpp
没有Foo.h
。如果两者都有要求,则包括在两者中。
切线方向,作为最佳实践,切勿在头文件中使用using
指令。如果您需要,您可以在实现文件(.cpp)中使用using
指令。
在“Foo.hpp”中,你使用字符串,流或异常吗? – 2013-03-14 21:56:31