包含.cpp标准的文件

时间:2013-11-14 20:52:15

标签: c++ build include

请在下面找到一个简单的例子。 我知道.hpp文件必须包含或转发声明它使用的所有内容 我想知道是否最好包含.cpp文件中使用的所有.hpp文件。 我问这个是因为我最近看到了一个我正在研究的新项目,人们倾向于避免在很多情况下包括标题。

在这种情况下:在a.cpp中包含b.hpp是否合适? 我知道它已经被包含在a.hpp中了,但我个人觉得如果一个符号出现在.cpp中,它应该被包含(或者如果可能的话,也可以向前声明)

a.hpp

#pragma once
#include "b.hpp"

class C; //forward declaration of C

class A
{
public:
    B get_b();
private:
    B  _b;
    C* _c;
};

a.cpp

#include "a.hpp"
//needed or I can leave it out, since B is included already in a.hpp?
#include "b.hpp"

B A::get_b()
{
    return _b;
}

2 个答案:

答案 0 :(得分:3)

尝试将#include移至.cpp个文件,您可以使用多少。它减少了编译时间并避免了在整个项目中传播声明。因此,如果您可以在b.hpp文件中添加.cpp

在头文件中包含b.hpp后,您无需将其包含在.cpp文件中。 将它再次包含在.cpp文件中由于标题保护(如果你把它们放在一起)没有效果。

答案 1 :(得分:1)

关于要包含在.cpp(和.hpp)中的文件有两个主要问题

1)编译时间:减少包含数量以减少编译时间

粗略地说:只包含包含类数据/函数成员或您使用的内联函数/模板的文件。如果您只引用一个类,则前向声明的编译速度将比整个包含文件快得多。

2)脆弱性:不依赖于包含你需要的东西的包含文件

如果a.hpp包含b.hpp并且你需要在b.hpp中定义的东西(见上文)然后a.hpp的实现者停止需要a.hpp,你的代码就会中断

所有这些都是确定性的,应该努力使其正确