c ++头文件和include

时间:2013-07-29 03:15:31

标签: c++ header

我对#include iosteam和vector的位置有疑问?在main.cpp,header.h或memberfunction.cpp中?似乎我需要在main.cpp中使用命名空间std,但#include<功能性>在头文件>中。有没有强有力的方法来做到这一点?谢谢!

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

出于可读性原因,您希望仅在使用它们的转换单元中包含标头。因此,在不使用所有std::vector模板的源代码中,您不会#include <vector>,因此您可以在自己的#include "myheader.h"

之前添加该包含

但是,您可能希望通过预编译标头来减少编译时间。 在解释in this answer时,只有当您的所有程序都有一个包含所有包含的标头时,带GCC的预编译标头才有效。出于这个原因,你希望有一个myheader.h,它本身包括<vector>(即使是少数不使用它的编译单元)。

头文件的预编译是编译器(也许是系统)特定的。

答案 2 :(得分:0)

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