c++头文件和include
c++ Header file and include
我有一个问题,关于在哪里#包括iostamp和vector?在main.cpp、header.h中还是在memberfunction.cpp中?似乎我需要在main.cpp中使用命名空间std,但#include<头文件>中的functional>。有什么强有力的方法可以做到这一点吗?谢谢
简单规则:
仅在需要头文件的文件中包含头文件。
如果源文件或头文件不使用在头文件中定义/声明的任何构造,则无需包含该头。这样做只会将不必要的代码带入这些转换单元,从而损坏名称空间,并可能增加编译时间。
出于可读性的原因,您希望仅在使用标头的翻译单元中包含标头。因此,在完全不使用std::vector
模板的源代码中,您不会使用#include <vector>
,因此您会将该include放在自己的#include "myheader.h"
之前
但是,您可能希望通过预编译标头来减少编译时间。正如我在这个答案中所解释的,只有当所有程序都有一个包含所有include的头时,带有GCC的预编译头才能工作。因此,您希望有一个单独的myheader.h
,它本身包括<vector>
(即使对于少数不使用它的编译单元)。
头文件的预编译是编译器(也许还有系统)特定的。
如果在header.h
中以任何方式使用矢量或输入/输出流(例如,该类型的参数等),则最好在其中包含iostream
和/或vector
。如果您只在memberfunction.cpp
中内部使用它们,请将其包含在其中(这对代码的其余部分没有用处)。
相关文章:
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何将更多文件夹添加到c++include路径
- 修改生成文件以简化框架 #include 路径
- macOS 致命错误:sys/_types/_int8_t.h:没有此类文件或目录 #include < sys/_types/_int8_t.h>
- /usr/include/c++/7/cstdlib:75:15:致命错误:stdlib.h:没有这样的文件或目录 #i
- ROS C++项目"include"文件夹?
- 如何使boost::spirit解析器和lexer能够处理include文件
- 最佳做法:src/include 或 src 文件夹旁边的 include 文件夹
- 如何生成丢失的#include文件的列表
- 多个#include文件的类重新定义错误?(C++)
- 执行pclint时,include文件的顺序是否重要
- 如何在大型项目中预处理具有多个 #include 文件的单个源文件
- 创建带有嵌套include文件夹的c++NuGet包
- 当向第三方提供库时,C++include文件是否属于安全漏洞
- 如何使用 Eclipse 在 JNI "include"文件夹中添加 openCV 文件
- 包含from include文件的最佳实践
- Visual Studio在发布模式下找不到boost include文件(在调试中工作)
- 编译c++,组织include文件
- cmake如何知道include文件和lib在哪里
- 为什么我的#include文件不能编译