什么放在cpp和什么h文件

时间:2012-09-20 12:30:53

标签: c++

  

可能重复:
  In C++ why have header files and cpp files?
  C++ - What should go into an .h file?

.cpp文件中通常定义的所有函数/方法都可以在.h文件中内联定义。那么使用.cpp的原因是什么?有效性?编译时间?

是否有一些标准可以保存在.h中,什么应该放在.cpp?

谢谢。

3 个答案:

答案 0 :(得分:3)

有关

This questionthat

基本上编译器能够编译所有文件,无论您将所有代码都放在.h或.cpp文件中。他们之间的分离有根本的优点

  1. 简而言之,您希望将界面与实现分开,以实现可见性和可重用性。
  2. 减少编译时间
  3. 当您使用3dparty库的头文件时,您真的不关心它的实现,而是在函数签名上调用
  4. 当您将自己的库作为util库提供时,您希望仅提供供人们使用的头文件,以及希望开发库的人员的源库 这个清单可以更进一步,但现在我想到了什么

答案 1 :(得分:2)

  • 缩短编译时间。如果定义都在头文件中,那么每次更改头文件时,都需要编译包含该头文件的所有文件。
  • 隐藏实现界面。允许用户发送标题和库。

答案 2 :(得分:2)

你不能内联一切。 对象可以定义一次,也可以只定义一次。只能多次定义类和模板,并且内联只允许重新定义函数

例如,考虑 header.hpp:

extern int a;

struct Foo { static int b; };

以下必须进入专用的单个翻译单元:

#include "header.hpp"

int a;
int Foo::b;

另一方面,类 templates 的静态成员可以而且必须确实保留在标题中:

template <typename T> struct Foo { static int x; };
template <typename T> int Foo<T>::x;

链接器必须弄清楚如何统一对象。