应该将"include"放在C++中

Hai*_*ang 29 c++ include

我正在阅读一些c ++代码,请注意头文件和.cpp文件中都有"#include".我想如果我移动文件中的所有"#include",让我们说foo.cpp,它的'头文件foo.hh,让foo.cpp只包含foo.hh代码应该工作,无论如何不考虑像缺点,效率等.

我知道我的"突然"的想法必定在某种程度上是一个坏主意,但它的确切缺点是什么?我是c ++的新手,所以在我自己回答这个问题之前,我不想阅读很多C++书.所以请在这里提出问题以寻求帮助.提前致谢.

jkp*_*jkp 34

通常,尽可能将包含放在.cpp文件中,并且只在不可能的.h文件中放置.

在许多情况下,您可以使用前向声明来消除在其他标头中包含标头的需要:这有助于减少编译时间,这可能会随着项目的增长而成为一个大问题.这是一个很好的习惯,因为试图在以后(当它已经是一个问题)将它整理出来时可能是一个彻头彻尾的噩梦.

此规则的例外是模板化类(或函数):为了使用它们,您需要查看完整定义,这通常意味着将它们放在头文件中.


jfa*_*ett 14

标头中的包含文件应该只是支持该标头所必需的文件.例如,如果标题声明了一个向量,则应该包含向量,但没有理由包含字符串.您应该能够拥有一个只包含该单个头文件的空程序并进行编译.

在源代码中,您需要包含所有调用的内容,当然.如果你的标题都不需要iostream,但你需要它来实际来源,它应该单独包含.

在我看来,包含文件污染是代码腐烂的最糟糕形式之一.

编辑:嘿.看起来解析器吃了>和<符号.


Pét*_*rök 6

您可以使包括头文件在内的所有其他文件也传递包含#include在标题中的所有文件.

在C++中(如在C中)#include由预处理器处理,只需在#included文件中插入所有文本代替#include语句.因此,对于大量的#includes,您可以将可编译文件的大小夸大到数百KB - 并且编译器需要为每个文件解析所有这些.请注意,包含在不同位置的相同文件必须在每个#included的位置再次进行重新分析!这可能会使编译速度变慢.

如果您需要在标题中声明(但不定义)事物,请使用forward声明而不是#includes.