C++ 自定义头文件和包含库[C+;+;]

C++ 自定义头文件和包含库[C+;+;],c++,header,libraries,C++,Header,Libraries,如果我创建如下标题: #ifndef _MY_HEADER_H #define _MY_HEADER_H #include <iostream> void foo(); #endif \ifndef\u MY\u HEADER\u H #定义我的标题 #包括 void foo(); #恩迪夫 对于其对应的.cpp文件,我是否需要在main.cpp文件中包含iostream?无需在main.cpp中再次包含它,因为在main.cpp版本中,如果包含相同的.h版本,则在编译时将自

如果我创建如下标题:

#ifndef _MY_HEADER_H
#define _MY_HEADER_H

#include <iostream>
void foo();

#endif
\ifndef\u MY\u HEADER\u H
#定义我的标题
#包括
void foo();
#恩迪夫

对于其对应的.cpp文件,我是否需要在main.cpp文件中包含iostream

无需在main.cpp中再次包含它,因为在main.cpp版本中,如果包含相同的.h版本,则在编译时将自动提供包含内容,为什么要写一个多余的行?

回答您的问题:不,您不需要(再次)包含它


但这是一个很好的实践,在标题中只包含标题工作所需的内容。因此,如果您的
foo()
方法需要
iostream
,您应该包含它。如果您创建的类只使用指向其他类的指针或引用,您应该更喜欢向前声明,而不是包含各个类的完整标头。

我认为只在您真正需要的位置包含标头是一种好的样式,而不必依赖其他包含文件来包含标头。因此:是的,我也会在main.cpp中包含
iostream
。当你在做的时候:检查是否足够将
iostream
包含在你的
.cpp
文件中而不是包含在标题中。@arne这只是一个例子,我正在考虑将“SDL.h”、“SDL\u image.h”和“SDL\u mixer.h”放在标题中,并从那里将它们与我的自定义函数一起使用。是否需要将它们放在我的主文件中?我认为在@arne描述的情况下,没有必要在附带的.cpp中再次包含头文件。否则,我同意1)如果头文件依赖于其他头文件进行编译,则只应在其他头文件中包含头文件,转发声明没有帮助;2)不应依赖于其他头文件包含的内容(它们可能会更改其包含内容并使代码中断)@FranciscoGarcia我认为您不需要在属于您的.h文件的.cpp文件中再次包含SDL头,但在这方面似乎存在不同的意见。无论如何,如果可以的话,你应该避免在头文件中包含,否则你的编译时间可能会飞涨。