1

我有一个关于在哪里#include iosteam 和 vector 的问题?在 main.cpp、header.h 还是在 memberfunction.cpp 中?似乎我需要在 main.cpp 中使用命名空间 std,但在头文件中使用 #include<functional>>。有什么强大的方法可以做到吗?谢谢!

4

3 回答 3

3

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

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

于 2013-07-29T03:17:55.990 回答
1

出于可读性原因,您只想在使用它们的翻译单元中包含标题。因此,在根本不使用std::vector模板的源代码中,您不会#include <vector>,因此您可以将该包含放在您自己的之前#include "myheader.h"

但是,您可能希望通过预编译头文件来减少编译时间。正如我在这个答案中解释的那样,只有当你的所有程序都有一个包含所有包含的头文件时,使用 GCC 的预编译头文件才有效。出于这个原因,您希望拥有一个myheader.h本身包含的单曲<vector>(即使对于少数不使用它的编译单元)。

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

于 2013-07-29T03:20:44.473 回答
0

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

于 2013-07-29T03:22:07.593 回答