我是否需要在源文件中包含的标题中包含所有内容?例如,我有一个名为source.cpp的文件,它以:
开头#include <string>
#include <vector>
#include <cctype>
然后我有一个名为source.hpp的标题,它只包含字符串。编译得很好,但这是不好的做法,还是会导致将来出现并发症?
答案 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>
这样您就可以避免使用不会被使用的数据。只从头文件中插入的数据较少,而不是所有内容。