繁体   English   中英

C ++:包含头文件的最佳位置

[英]C++ : Best place to include header files

假设我们有四个文件:ah,a.cp​​p,b1.h和b2.h。 并且,我们需要在ah或a.cpp中包括b1.h和b2.h。 我应该在哪里包括b1和b2? 假设只有a.cpp需要b1和b2。

如果头文件不需要它,则将其包含在cpp中。

这样可以减少编译时间,并有助于了解模块之间的依赖性。

一般规则是,应避免在不使用其定义的标头中包含标头。

仅在标题中包含所需的内容。

ah的类定义和函数声明是否需要b1.h或b2.h? 然后包括所需的内容。

否则,仅包括.cpp。

请记住,每次包含文件时,编译所需的时间就更长。

以下是一些需要什么时的提示:

  • 不需要包含返回值或参数。 例如std::string blahFunc(std::string a); 不需要头文件中包含的<string> (尽管仍然需要一个前向声明)

  • 指针类型不需要被包括,它们只需要被前向声明。 例如randomType * f(); 不需要在标头中包含randomType的标头。 您要做的就是使用class randomType;向前声明class randomType;

  • 引用也可以只被向前声明。

如果b1.h和/或b2.h具有在ah中实际使用的定义(例如structtypedef等)(例如,在函数原型中作为参数或返回类型),则应将其包括在标头。

否则,如果b1.h / b2.h仅提供a.cpp内部使用的定义(私有成员等),则将其包括在a.cpp的顶部。

您应该尝试仅在文件中包含编译器理解该文件实际需要的内容。 (与Windows不同,怪异的是<Windows.h> 。)

我认为include指令应始终位于您的.h **文件中。 您应该放入a.cpp文件中的唯一内容应该是

#include "a.hpp"

为了理解原因,假设鲍勃在程序中使用了您的代码,并且您的代码未公开(即,您仅以库的形式提供)。 然后,他所看到的只是您的标题。 如果您在标头中包含所需的所有内容,那么他​​仍将能够检查代码的依赖项,并确保他具有代码所需的所有内容。 如果将include指令放在.c **文件中,那么除非您的代码是开源的(即他有权访问.c **文件),否则他将无法查看他必须确保安装的软件包已安装。

暂无
暂无

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

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