C++ 中 hpp 头文件说明
在 Visual Studio(以及一般的 C++ 开发)中,.hpp 文件是一种常见的头文件扩展名,它的含义和用法如下:
1. .hpp 文件是什么?
.hpp是 C++ 头文件(Header File) 的一种扩展名,类似于传统的.h文件,但通常用于 纯 C++ 代码(而非 C 兼容代码)。.h通常用于 C 语言头文件 或 C/C++ 兼容头文件,而.hpp更明确地表示 C++ 头文件。
2. .hpp 和 .h 的区别
| 特性 | .h 文件 |
.hpp 文件 |
|---|---|---|
| 语言 | C 或 C++ | C++ 专用 |
| 模板支持 | 可能受限(C 不支持模板) | 完全支持 C++ 模板 |
| 内联函数 | 可能受限(C99 才支持) | 完全支持 |
| 类定义 | 可以(但通常是 C 风格) | 更适合 C++ 类 |
| 常见用途 | C 库头文件、兼容头文件 | C++ 库头文件、模板库 |
3. 为什么使用 .hpp?
(1) 明确区分 C 和 C++ 头文件
- 如果一个项目同时包含 C 和 C++ 代码,使用
.hpp可以直观地表明该头文件 仅适用于 C++,避免混淆。 - 例如:
math.h→ C 数学库math.hpp→ C++ 数学库(可能包含模板、类等)
(2) 模板和内联函数的支持
- C++ 的 模板(template) 和 内联函数(inline) 通常需要 完整的定义在头文件 中(不能像 C 那样只放声明)。
.hpp文件更符合这种需求,因为它的内容通常是 直接编译 的(而非像.h那样可能只是声明)。
(3) 现代 C++ 项目的惯例
- Boost、Eigen、STL 实现 等现代 C++ 库普遍使用
.hpp作为头文件扩展名。 - 例如:
#include <boost/algorithm/string.hpp> // Boost 使用 .hpp #include <eigen3/Eigen/Dense.hpp> // Eigen 使用 .hpp
4. .hpp 文件的典型内容
一个 .hpp 文件通常包含:
- 类定义(class)
- 模板(template)
- 内联函数(inline functions)
- constexpr 变量
- C++ 专属特性(如命名空间
namespace)
示例:vector.hpp
// vector.hpp
#pragma once
namespace mylib {
template <typename T>
class Vector {
public:
Vector(size_t size);
void push_back(const T& value);
// ...
private:
T* data;
size_t size;
};
// 内联函数
inline void print(const Vector<int>& vec) {
// ...
}
}
5. 在 Visual Studio 中使用 .hpp
- 创建
.hpp文件:- 右键项目 → 添加(Add) → 新建项(New Item) → 头文件(.hpp)。
- 包含
.hpp文件:#include "mylib/vector.hpp" // 使用相对路径或项目路径 - 编译行为:
.hpp和.h在编译时没有区别,只是约定不同。- 但 模板代码必须放在
.hpp(或.h)中,因为模板需要编译器在包含时实例化。
6. 什么时候用 .h,什么时候用 .hpp?
| 场景 | 推荐扩展名 |
|---|---|
| 纯 C 代码 | .h |
| C/C++ 兼容代码 | .h |
| 纯 C++ 代码(含类、模板) | .hpp |
| 仅包含宏和 C 风格声明 | .h |
| 现代 C++ 库(如 STL、Boost) | .hpp |
7. 总结
.hpp是 C++ 头文件 的常见扩展名,特别适合 模板、类、内联函数 等 C++ 特性。- Visual Studio 对
.hpp和.h的处理没有本质区别,但使用.hpp能更清晰地表明代码是 C++ 专用。 - 现代 C++ 项目(如 Boost、Eigen)普遍使用
.hpp,而 传统 C 或兼容代码 使用.h。
如果你的代码是 纯 C++,建议使用 .hpp 以保持一致性! 🚀

浙公网安备 33010602011771号