【问题标题】:Why do functions/objects inside anonymous namespace have external linkage?为什么匿名命名空间内的函数/对象有外部链接?
【发布时间】:2012-06-05 16:06:42
【问题描述】:

为什么在匿名命名空间中定义的符号(函数和变量)没有与 static 关键字一样的内部链接?如果一个函数在外部不可见/不可访问,那么外部链接的原因是什么?

【问题讨论】:

  • 他们没有有外部链接,而是内部链接。你的来源是什么?
  • 可能是 C++03 标准。
  • @SteveJessop 匿名命名空间也存在于 C++03 中,并提供内部链接。
  • @Luchian:这不是真的。比较 C++03 和 C++11 之间的 3.5/4。

标签: c++


【解决方案1】:

在 C++03 中,禁止将具有内部链接的名称用作模板参数[*]。因此,未命名命名空间中的大多数事物的名称都具有外部链接,以允许它们与模板一起使用。您可以通过声明 static 在未命名的命名空间中显式指定名称内部链接,与命名或全局命名空间中的相同。

在 C++11 中这两种情况都发生了变化——默认情况下,未命名命名空间中的名称具有内部链接 (3.5/4),具有内部链接的名称可以用作模板参数。

[*] 对于类型,它必须有外部链接。对于对象和函数,如果将其 address 用作模板参数,则它必须具有外部链接,尽管例如可以将 const 的 value 用作模板参数具有内部链接的整数。

【讨论】:

  • +1,拜托,您能否在答案中添加 C++11 标准中表示默认情况下内部链接的段落编号?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 2018-09-10
  • 2015-05-13
  • 1970-01-01
  • 2014-11-19
  • 2011-05-11
相关资源
最近更新 更多