我的标题中是否需要我的#include指令?

时间:2015-06-26 14:32:50

标签: c++ c header include

我是否需要在源文件中包含的标题中包含所有内容?例如,我有一个名为source.cpp的文件,它以:

开头
#include <string>
#include <vector>
#include <cctype>

然后我有一个名为source.hpp的标题,它只包含字符串。编译得很好,但这是不好的做法,还是会导致将来出现并发症?

6 个答案:

答案 0 :(得分:6)

源文件需要的一些头文件可能只是用于实现细节,所以不,它们也不需要在标头中UILocalNotification

我遵循的规则是:#include只在头文件中绝对需要的内容,然后在源文件中,#include头文件包含的所有文件,以及用于实现的其他所需头文件的信息。

如果有人想知道,我将标题中的所有#include指令复制到源文件中的原因是,如果我稍后用前向声明替换标题中的那些指令之一,我的源文件不会根本不需要改变。

答案 1 :(得分:2)

我通常会包含给定文件所必需的内容。

如果您的标头使用字符串类型,则添加#include <string>。代码也一样。一般来说,标题是有保护的,所以它既无害又有趣的表达(无需挖掘标题/代码来确定必要的内容)。

答案 2 :(得分:1)

标题肯定不需要cpp需要的所有#include。此外,我认为应该劝阻这种做法,在某些情况下甚至是不可能的。

我认为您的标题应该包含标题本身所需的内容,仅限(即标题应尽可能少#include),并且您{{1有所有额外的cpp s。另请注意,如果cpp #include是标题,则无需重复cpp标题中的#include

对于你的例子,我会有

#include
标题中的

#include <string>

另请注意,前向声明可以进一步减少标题中#include "source.hpp" // automatically includes string #include <vector> #include <cctype> 的数量。

答案 3 :(得分:0)

无需在头文件中包含所有内容。放置需要的东西 在头文件中,只需在.cpp文件中包含头文件。 更好的方法是在头文件中使用前向声明。这样你就可以避免不必要的编辑。

答案 4 :(得分:0)

我总是建议MINIMIZE #includes用于生产代码。

特别是在标题(.hh)文件中。

在'热门'头文件中更是如此(数千次拉动头文件,使用grep或find)。

甚至到了使用

的程度
  • 类,结构等的外部/前向声明,而不是include(通过在头文件中使用引用或指针)和

  • 包含文件的双重'警卫'(包括在哪里和在头文件中的#ifdef警卫)和

  • 重构“非常受欢迎”的标题包括标题(即使检查不能识别内容的“内聚力差”)。

原因:

我使用过大型版本(即100到1000个KLOC)。 态度恶劣w.r.t. header-file-includes在构建网络和服务器上具有显着的加载效果,从而影响了团队的所有工作效率。

我不止一次测量(使用'-H'和C ++ map和wc)字节计数(字符数)很好地进入多个字节...进行一次构建。共享网络和共享文件服务器上的巨大负载。

  • 在那种环境中,清晨的构建可能需要40分钟。

  • 在繁忙的工作日中午,200多名开发人员通常会去吃一顿长午餐,因为这需要3到4个小时。

答案 5 :(得分:0)

是的,一定可以提高编程技巧, 我们可以使用#include"string"

#include<string>

这样您就可以避免使用不会被使用的数据。只从头文件中插入的数据较少,而不是所有内容。