c++ - 将函数定义放在头文件中

标签 c++ static namespaces inline header-files

如果你想将函数定义放在头文件中,似乎有三种不同的解决方案:

  1. 将函数标记为inline
  2. 将函数标记为静态
  3. 将函数放在匿名命名空间中

(直到最近,我什至不知道#1。)那么这些解决方案有什么区别,我什么时候应该更喜欢哪个?我在只有头文件的世界里,所以我真的需要头文件中的定义。

最佳答案

static 和未命名的命名空间版本最终是相同的:每个翻译单元都将包含它自己的函数版本,这意味着给定一个静态函数 f ,指针&f在每个翻译单元中会有所不同,程序中会包含N个不同版本的f(二进制中代码较多)。

不是在标题中提供 a 函数的正确方法,它将提供 N 个不同(完全相同)的函数。如果函数包含 static 局部变量,那么将有 N 个不同的 static 局部变量...

编辑:为了使这一点更明确:如果您想要在不违反单一定义规则的情况下在标题中提供函数的定义,正确的方法是使函数 内联

关于c++ - 将函数定义放在头文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7833941/

相关文章:

php - Doctrine源代码: namespace or class?中 "PDOStatement extends\PDOStatement"的含义

c++ - 新线程只发出第一条指令并且永远不会恢复

c++ - 范围解析运算符被使用两次

c# - 用于延迟加载的静态抽象属性的替代方案

delphi - 使用项目中的波形文件

javascript - Javascript 变量的窗口与应用程序范围

c++ - 数组运行时错误

c++ - 为什么枚举而不是静态 bool ?

java - 静态数据使用SoftReference防止Java内存不足

c++ - Sonarqube c++ 语法错误跳过 __namespace