[英]C++ : Best place to include header files
假设我们有四个文件:ah,a.cpp,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中实际使用的定义(例如struct
或typedef
等)(例如,在函数原型中作为参数或返回类型),则应将其包括在标头。
否则,如果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.