在头文件中包含标题?

我自己制作了几个库(几何库,链表库等)。 我想制作一个头文件,将它们全部包含在一个lib.h中。 我可以这样做:

#ifndef LIB_H_ #define LIB_H_ #include  #include  #include  #include  .... #endif 

然后我可以引用这个库并实际引用多个库。 这可能吗? 如果没有,是否有办法绕过它?

是的,这会奏效。

但请注意,如果在此文件中包含大量标题,并且不需要在每个源文件中都使用所有标题,则可能会增加编译时间。

它还使得更难以弄清楚特定源文件实际依赖于哪些头文件,这可能使代码理解和调试更加困难。

是的,这有效,并且实际上在大多数API中使用。 记住#include实际上做了什么(告诉预处理器立即包含一个新文件),这应该是有意义的。 尽管实现具有(大)最大深度,但没有什么可以阻止包含的几个级别。

如上所述,您应该将标头组织成逻辑分组。

包含的“正确方式” (在A中)

  • 如果: A根本不对B做任何引用
  • 如果: B的唯一引用是在朋友声明中
  • 转发声明B如果: A包含B指针或引用: B* myb ;
  • forward if语句如果:一个或多个函数有一个B对象/指针/引用作为参数,或作为返回类型: B MyFunction(B myb);
  • #include "bh" if:B是A的父类
  • #include "bh" if:A包含B对象:B myb;

从cplusplus.com文章中你应该明确地阅读