C ++:何时可以在头文件中包含代码?

时间:2009-05-20 05:31:31

标签: c++ coding-style header

我被教导要将课程定义和代码分开。

但是,我已经看到人们经常在标题中包含一些代码的情况,例如简单的访问方法,它返回变量的引用。

你在哪里划线?

9 个答案:

答案 0 :(得分:15)

一般来说,您希望编译器内联或模板化代码。在任何一种情况下,代码必须在编译器可用的任何地方都可用,因此您别无选择。

但是,请注意,您在头文件中放入的代码越多,编译所需的时间就越长 - 并且您最终会更频繁地触摸头文件,从而导致缓慢构建的连锁反应:)

答案 1 :(得分:5)

最小化标头中代码量的一个原因是最小化实现更改时要重新编译的代码量。如果你不关心,你可以在标题中包含任意数量的代码。

有时只在头文件中使用代码是为了公开代码而做的 - ATL为eaxmple做了。

答案 2 :(得分:5)

在开发大型C ++项目时,您需要保持警惕,使每个.CPP文件尽可能少地与头文件结合使用。

所以我有一个简单的“画线”规则:

如果通过内联实现,您的头文件现在需要包含一个额外的头文件,您应该将实现从头部移到.CPP文件中。

当然,这不是不内联的唯一原因,但这是一个不应该划线的明确例子。

答案 3 :(得分:4)

  1. 内联函数
  2. 一线/两线方法
  3. 模板
  4. 但是当标题的大小增加时,编译将花费越来越多的时间,因此使用预编译的标题很有用。

答案 4 :(得分:1)

我会坚持使用.c和.cpp文件中的代码以及.h,.hpp文件中的标题。原因是,当我下载源代码的.tar.gz或zip时,我总是在查找源头的.h文件和源代码的.cpp文件。许多人已经习惯了,所以我认为你应该保持这种风格。

答案 5 :(得分:1)

当你在简单的getter / setter方法的头文件中有代码时,它或多或少都很好,因为你要么节省一些工作时间,因为代码维护(在头文件和实现文件中键入相同的方法),或者因为你真的希望这个方法由于时间关键位置的函数调用开销而内联。

如果您在很多地方或多或少地看到很多类,那么您不仅会受到较慢构建的影响,而且链接时间可能很大

标题和实现文件之间混合代码的另一个缺点是可读性。如果你在头文件中一致地声明并且一致地将代码保存在实现文件中,那么在方法之间保持相同的顺序会更容易。如果你知道我的意思,就没有漏洞。

干杯!

答案 6 :(得分:1)

另请注意,如果将代码放在头文件中并且不小心使用Makefile,则可能会出现一些奇怪的副作用。我曾经有过一个错误,因为我在一个标题中更改了代码,这个标题被重新编译成了一些文件而不是其他文件,因为Makefile中的依赖关系不正确。如果您自动生成Makefile,这不是什么大问题。

答案 7 :(得分:1)

如果您希望“内联”代码,您将需要标题中的代码。否则,将实现粘贴在体内会有更多的好处。

答案 8 :(得分:0)

这取决于你。 Boost将几乎所有的代码放在标题中......而且它们是一个备受尊重的库。