省流:都是一种非标准的约定,具体情况按团队规范来。
Header Plus Plus (.hpp)
是 .h 的 C++ 替代,用来包含类定义、函数声明、宏等,是接口定义的一部分。
特殊用法: 在 C++ 模板编程或只包含小型实现代码的情况下,.hpp 文件有时会包含完整的实现代码(包括函数体),尤其是当代码依赖于模板且为了编译器能看到完整的定义时。
Template Plus PLus (.tpp)
专门用于存放 C++ 模板的实现
原因: 由于 C++ 模板(Templates)的特殊性,它们的定义和实现通常都必须放在头文件中,才能在编译时被实例化。为了将模板的声明(放在 .hpp 或 .h 中)和实现(函数体、成员函数体)分离,保持接口文件的整洁,开发者会把实现部分放入一个 .tpp 文件。
如何使用: 这个 .tpp 文件不会单独被编译,而是被主头文件(如 .hpp)在末尾使用 #include 预处理指令包含进去。
Inline Plus Plus (.ipp)
-
用途: 类似于
.tpp,但它通常用于存放 内联函数 (Inline Functions) 或 模板 的实现代码。 -
原因: 内联函数和模板的实现都必须在每个包含它们的编译单元(Translation Unit)中可见。
- 将这些实现放在
.ipp中,然后由主头文件(如.hpp)包含,可以保持主头文件(.hpp)的整洁,只保留声明和高层接口定义。
- 将这些实现放在
-
如何使用: 与
.tpp类似,它也是被主头文件#include包含的。
更多问题
.hpp和.h有什么区别?有没有标准告诉我怎么做?
从编译器的角度来看,.hpp 和 .h 没有本质区别。它们都只是文本文件,在编译过程中,C++ 预处理器会使用 #include 指令将它们的内容复制到源文件中。
但是在社区约定和惯例中,一般用来区分是来自 C 还是来自 C++ 的头文件。
没有标准规定,但是是约定俗成。