C++标头
如果我有A.cpp和Ah以及bh,ch,dh
我应该这样做:
在啊:
#include "b.h"
#include "c.h"
#include "d.h"
Run Code Online (Sandbox Code Playgroud)
在A.cpp中:
#include "A.h"
Run Code Online (Sandbox Code Playgroud)
要么
在A.cpp中:
#include "A.h"
#include "b.h"
#include "c.h"
#include "d.h"
Run Code Online (Sandbox Code Playgroud)
有性能问题吗?明显的好处?这有什么不好的吗?
Ada*_*eld 21
你应该只包括编译所需的内容; 添加不必要的包含会损害您的编译时间,尤其是在大型项目中.
每个头文件应该能够自己完全编译 - 也就是说,如果你有一个只包含那个头的源文件,它应该编译没有错误.头文件应包含不超过必要的内容.
尝试尽可能使用前向声明.如果你正在使用一个类,但是头文件只处理指向该类对象的指针/引用,那么就不需要包含该类的定义 - 只需使用前向声明:
class SomeClass;
// Can now use pointers/references to SomeClass
// without needing the full definition
Run Code Online (Sandbox Code Playgroud)
这里的关键实践是在每个foo.h文件周围都有一个警卫,例如:
#ifndef _FOO_H
#define _FOO_H
...rest of the .h file...
#endif
Run Code Online (Sandbox Code Playgroud)
这可以防止多重包含,包含循环和所有此类伴随的恐怖.一旦确保每个包含文件都受到保护,具体细节就不那么重要了.
我喜欢亚当表达的一个指导原则:确保,如果源文件只包含a.h
,它将不会因为a.h
假设其他文件被包含在其中而不可避免地得到错误- 例如,如果a.h
需要b.h
包含之前,它可以而且应该只是包括BH本身(守卫会做出一个空操作,如果BH 是先前已列入)
反之亦然,源文件应该包含它需要的标题(宏,声明等),而不是假设其他标题只是神奇地进入,因为它包含了一些.
如果你按价值使用课程,唉,你需要.h
包含一些类的血腥细节.但是对于通过引用或指针的一些用途,只需一个裸class sic;
就足够了.例如,所有其他条件相同,如果类a可以使用指向类b实例的指针(即成员class b *my_bp;
而不是成员class b *my_b;
),则可以使包含文件之间的耦合变弱(减少重新编译) - 例如b.h
可能有不止一点class b;
,而所有的血淋淋的细节都在b_impl.h
其中仅由报头包含真的需要它?
归档时间: |
|
查看次数: |
2729 次 |
最近记录: |