如果你想将函数定义放在头文件中,似乎有三种不同的解决方案:
- 将函数标记为
inline
- 将函数标记为
静态
- 将函数放在匿名命名空间中
(直到最近,我什至不知道#1。)那么这些解决方案有什么区别,我什么时候应该更喜欢哪个?我在只有头文件的世界里,所以我真的需要头文件中的定义。
最佳答案
static
和未命名的命名空间版本最终是相同的:每个翻译单元都将包含它自己的函数版本,这意味着给定一个静态函数 f
,指针&f
在每个翻译单元中会有所不同,程序中会包含N个不同版本的f
(二进制中代码较多)。
这不是在标题中提供 a 函数的正确方法,它将提供 N 个不同(完全相同)的函数。如果函数包含 static
局部变量,那么将有 N 个不同的 static
局部变量...
编辑:为了使这一点更明确:如果您想要在不违反单一定义规则的情况下在标题中提供函数的定义,正确的方法是使函数 内联
。
关于c++ - 将函数定义放在头文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7833941/