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