C ++ #include标头

齿

有一本C ++书说,我们需要在两个不同的文件中#include头两次,一个包含一个类,另一个包含使用上一个文件中的类的main()。

这是报价:

因为我们的Sales_data类具有字符串成员,所以Sales_data.h必须#include字符串标题。使用Sales_data的程序还需要包含字符串头。

但是有些我不明白。如果我们在主文件中#include“ Sales_data.h”,则该头文件中已经包含#include <(string)>,因此无需在我们的主文件中#include <(string)>。

据我了解,当我们在主文件中#include一个文件时,C ++只复制和粘贴带有头文件的整个文件,并将其粘贴到主文件中。因此,无需添加第二个#include <(string)>。我说的是在标题中没有任何#ifndef或#define时会发生什么。

我自己进行了测试,只需要在一个文件中编写#include <(string)>即可。除了头文件中的#pragma以外,我在任何一个文件中都没有任何#指令。

干杯和hth。-阿尔夫

您阅读的描述是虚假的。如果类C的定义使用类型T,例如std::string,则该类型必须可用。通常(除Microsoft代码外),定义C的标头包括定义T的标头。然后,C的客户端代码仅需要包含定义C的标头。

对于更多的任意间接标头包含,情况则有所不同。假设C类没有使用std::string,但其标头包含<string>然后,如果您的使用C的代码也使用std::string,那么最好让您的代码也包含<string>即使在代码发展的当前阶段这不是必需的。

至少与以前的Microsoft风格一样,客户端代码包括必要的标头的情况是,它本身可以提供更快的构建(在构建过程中减少文件访问),并通过基本工具(例如Visual C ++的预编译标头)支持某些构建优化。 ,需要将所有要预编译的标头收集在一个大的“所有标头之母”中。反对这种做法的理由是,这需要进行更多的维护工作。而且所有编程中的80%是维护。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章