【问题标题】:linkage of function with parameter from unnamed namespace函数与来自未命名命名空间的参数的链接
【发布时间】:2017-05-28 06:48:46
【问题描述】:
namespace { class A { } ; }

void foo ( A ) // _Z3fooN12_GLOBAL__N_11AE
{ ; } 

显然,函数的符号将引用 A 的名称,它是唯一命名的命名空间的成员(由于 this)。

foo 的链接是什么?

【问题讨论】:

    标签: c++ linkage unnamed-namespace


    【解决方案1】:

    函数foo 具有外部链接,因为它是全局的并且未声明static。函数的链接不依赖于参数。

    A 具有内部链接这一事实意味着不可能从另一个翻译单元调用foo,因为不可能在另一个翻译单元中声明foo,因为没有办法编写foo 的参数类型的名称。任何在另一个翻译单元中定义A 的尝试实际上都会定义一个不同的类型。

    因此,虽然名称foo 在技术上具有外部链接,但实际上不能被其他翻译单元引用。

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 2010-09-14
      • 2011-03-29
      • 1970-01-01
      • 2011-03-15
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多