我应该将外部标头放在 .h 文件还是.cpp文件中?
Should I put external header in .h file or .cpp file?
假设我有一个在foo.h
中定义的函数:
#pragma once
#include <vector>
#include <string>
void foo(std::vector<std:string> input);
和 In 在实现文件中foo.cpp
我需要使用另一个库(比如std::map
(来实现函数 foo。
void foo(std::vector<std:string> input){
...
std::map ...
...
}
请注意,声明中不需要std:map
,它只是特定于实现的。
我应该将#include <map>
放入foo.h
还是foo.cpp
文件中?
我知道代码将针对这两种情况进行编译,我想知道什么是好的做法?
将包含放在源文件中需要的位置。
将其放在标头中将不必要地导致标头的所有用户也包含<map>
,无论他们是否需要它。
对于琐碎的项目,这是无关紧要的,但对于大型项目来说,这很重要,因为无意义包括增加编译时间并增加名称冲突的风险。
简洁,只提供真正需要的东西。
否则,在一个真正的大型项目中,你最终会得到一堆每个人都害怕触摸的头文件,因为毕竟可能需要它。
此外,它将使项目中的其他人也包括地图库,这是不必要的开销(增加编译时间和/或增加名称重叠的危险(。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 为什么我的主文件.cpp不打印头文件中的任何内容
- 生成文件错误 - 找不到文件 - *.cpp
- 如何在文件.cpp gtkmm中声明小部件
- 没有实现文件(.cpp)的派生类
- 如何使用"CMakeLists.txt"中的add_library将整个文件(.cpp,.h等)包含在目录中
- 如何在Linux / Windows操作系统上使用文件*.cpp一步编译下面的代码
- 关于 Linux .so 文件无法链接到主文件.cpp文件
- 文件.cpp从Windows到Linux
- Ubuntu C++ 编译器错误: g++: 错误: 文件.cpp: 没有这样的文件或目录
- 如何将文件.cpp编译为本机编译
- 使用模板类时,似乎无法包含除 main 以外的任何 cpp 文件.cpp
- 无法编译C++文件.cpp。C++98模式
- 为什么C++头文件不需要包含实现文件 (.cpp)
- 如何访问位于独立文件(.cpp)中的非成员函数
- 如何在Visual Studio Code中通过键盘快捷键切换头文件/cpp文件
- 如何将数据从stringstream写入文件(CPP)
- 为什么filestream不把空白写入文件cpp ?