繁体   English   中英

包含.cpp标准的文件

[英]Include files in .cpp standard

请在下面找到一个简单的例子。 我知道.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;
}

尝试将#include s移动到.cpp文件中。 它减少了编译时间并避免了在整个项目中传播声明。 所以,如果你可以在.cpp文件中包含b.hpp

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

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

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

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

2)脆弱性:不依赖于包含您需要的内容的包含文件

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM