将文件包含在.cpp标准中
Include files in .cpp standard
请在下面找到一个简单的例子。我知道 .hpp 文件必须包含或转发声明它使用的所有内容我想知道是否最佳做法是同时包含.cpp文件中使用的所有.hpp文件。我之所以问这个问题,是因为我最近在我正在从事的一个新项目中看到,人们在很多情况下倾向于避免包含标题。
在这种情况下:在 a.cpp中包含 b.hpp 是否好?我知道它已经通过包含 a.hpp 包含在内,但我个人认为,如果一个符号出现在.cpp中,它应该被包含(或如果可能的话向前声明)
A.马普
#pragma once
#include "b.hpp"
class C; //forward declaration of C
class A
{
public:
B get_b();
private:
B _b;
C* _c;
};
答.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
移动到.cpp
文件中。它减少了编译时间,并避免了在整个项目中传播声明。因此,如果您可以在.cpp
文件中仅包含b.hpp
。
在头文件中包含b.hpp
后,无需将其包含在.cpp
文件中。由于标头保护(如果您放置它们),因此再次将其包含在.cpp
文件中不起作用。
关于.cpp(和.hpp)中包含哪些文件有两个主要问题
1)编译时间:减少包含数量以减少编译时间
粗略:仅包含包含类数据/函数成员或您使用的内联函数/模板的文件。 如果你只引用一个类,前向声明的编译速度将比整个包含文件快得多。
2)脆弱性:不依赖于包含文件,包括您需要的内容
如果 a.hpp 包含 b.hpp 并且您需要在 b.hpp 中定义的内容(见上文),然后 a.hpp 的实现者停止需要 a.hpp,您的代码将中断
所有这些都是确定性的,应该努力把它做好。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 命名空间中具有.h和.cpp文件的类
- 内置函数可查看CPP中的成员变量
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 使用CMake检测支持的C++标准
- Cpp-Tuple使用带有变量的get
- 标准 cpp 数据结构和线程互斥锁?
- 无法在 cpp 文件中通过可视化标准输出构建 yuvlib 库函数
- #include 多个.cpp中的标准文件,与将其 #include 在预编译标头中会影响可执行文件的大小?
- ndk中的标准与cpp向量问题
- 将文件包含在.cpp标准中
- 在 cpp 中重定向标准输出
- CPP - 标准平均
- 如何将 qml 的 console.log() 重定向到 cpp 标准输出
- 为什么CERT标准PRE00-CPP说"Avoid defining macros"
- 在Android-ndk(r7)中编译.cpp文件时如何打开"C++0X"实验标准?
- c++标准和C语言在哪里说的是一样的:编译单元(.cpp文件)中的变量是按照声明的顺序初始化的