![](/img/trans.png)
[英]#include standard files in more than one .cpp, versus #include it in precompiled header affects size of executable?
[英]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.