C++ c++;头文件和include

C++ c++;头文件和include,c++,header,C++,Header,我有一个问题,关于在哪里包括iosteam和vector?在main.cpp、header.h或memberfunction.cpp中?似乎我需要在main.cpp中使用namespace std,但是#在头文件中包含。有什么可靠的方法可以做到这一点吗?谢谢 简单规则: 仅在需要头文件的文件中包含头文件。 如果源文件或头文件未使用头文件中定义/声明的任何构造,则无需包含该头文件。这样做只会将不必要的代码带入这些翻译单元,从而破坏名称空间并可能增加编译时间。简单规则: 仅在需要头文件的文件中包含头

我有一个问题,关于在哪里包括iosteam和vector?在main.cpp、header.h或memberfunction.cpp中?似乎我需要在main.cpp中使用namespace std,但是#在头文件中包含。有什么可靠的方法可以做到这一点吗?谢谢

简单规则:
仅在需要头文件的文件中包含头文件。

如果源文件或头文件未使用头文件中定义/声明的任何构造,则无需包含该头文件。这样做只会将不必要的代码带入这些翻译单元,从而破坏名称空间并可能增加编译时间。

简单规则:
仅在需要头文件的文件中包含头文件。


如果源文件或头文件未使用头文件中定义/声明的任何构造,则无需包含该头文件。这样做只会将不必要的代码引入这些翻译单元,从而破坏名称空间并可能增加编译时间。

出于可读性原因,您希望仅在使用标题的翻译单元中包含标题。因此,在一个根本不使用std::vector模板的源代码中,您将不使用include,因此您将把include放在自己的include“myheader.h”之前

但是,您可能希望通过预编译头来减少编译时间。 正如我所解释的,只有当您的所有程序都有一个包含所有include的头时,GCC的预编译头才能工作。因此,您希望有一个单独的
myheader.h
,它本身包括
(即使对于不使用它的少数编译单元也是如此)


头文件的预编译是特定于编译器(可能还有系统)的。

出于可读性原因,您希望仅在使用头文件的翻译单元中包含头文件。因此,在一个根本不使用std::vector模板的源代码中,您将不使用include,因此您将把include放在自己的include“myheader.h”之前

但是,您可能希望通过预编译头来减少编译时间。 正如我所解释的,只有当您的所有程序都有一个包含所有include的头时,GCC的预编译头才能工作。因此,您希望有一个单独的
myheader.h
,它本身包括
(即使对于不使用它的少数编译单元也是如此)


头文件的预编译是特定于编译器(可能是系统)的。

如果在
头.h
中以任何方式使用向量或输入/输出流(例如,该类型的参数等),则最好在其中包含
iostream
和/或
向量。如果您仅在
memberfunction.cpp中内部使用它们,请将其包括在内(这对代码的其余部分没有任何用处)。

如果您在
header.h中以任何方式使用向量或输入/输出流(例如,该类型的参数等),然后最好在那里包括
iostream
和/或
vector
。如果您仅在
memberfunction.cpp的内部使用它们,请将其包含在其中(这对代码的其余部分没有用处)。

听起来是一个不错的建议,但没有抓住要点<代码>#include
语句放在文件中。按照惯例,多个文件组成一个翻译单元,即一个.cpp文件和多个.h文件。由于问题是将
#include
放在何处,特别是区分.cpp和.h文件,所以只说“in the TU”实际上什么也没说。所有C++代码都在TU中,没有其他的东西。听起来像是一个好建议,但没抓住要点。代码>#include
语句放在文件中。按照惯例,多个文件组成一个翻译单元,即一个.cpp文件和多个.h文件。由于问题是将
#include
放在何处,特别是区分.cpp和.h文件,所以只说“in the TU”实际上什么也没说。所有C++代码都在TU中,没有其他的东西。实际上, IOSWATION/COD>完全是输入或输出流参数的错误标头。它只定义了
std::cout
等。流类型本身在
中定义。但是,由于您不需要参数的定义,只需要一个声明,请使用
。实际上,
iostream
对于输入或输出流参数是完全错误的头。它只定义了
std::cout
等。流类型本身在
中定义。但是,由于您不需要参数的定义,只需要一个声明,所以请使用