将函数定义放在头文件中

fre*_*low 14 c++ static namespaces inline header-files

如果要将函数定义放在头文件中,则会出现三种不同的解决方案:

  1. 将功能标记为 inline
  2. 将功能标记为 static
  3. 将该函数放在匿名命名空间中

(直到最近,我甚至都没有意识到#1.)那么这些解决方案有什么不同之处,何时我更喜欢哪种?我在头文件世界,所以我真的需要头文件中的定义.

Dav*_*eas 15

static和无名的命名空间的版本最终会被相同的:每个转换单元将包含它的函数的自己的版本,这意味着,给定一个静态函数f,指针&f将在每个翻译单元不同,并计划将包含N个不同的版本的f(在二进制更多的代码).

这是提供正确的方法中的报头的功能,它将提供Ñ不同(完全相等)的功能.如果函数包含staticlocals,那么将有N个不同的static局部变量......

编辑:为了使其更明确:如果您想要的是在不破坏单一定义规则的情况下在标题中提供函数的定义,那么正确的方法是创建函数inline.