函数与来自未命名命名空间的参数的链接
linkage of function with parameter from unnamed namespace
namespace { class A { } ; }
void foo ( A ) // _Z3fooN12_GLOBAL__N_11AE
{ ; }
显然,函数的符号将引用 A 的名称,它是唯一命名的命名空间的成员(由于 this)。
foo 的链接是什么?
函数 foo
具有外部链接,因为它是全局的且未声明 [=11=]。函数的链接不依赖于参数。
A
具有内部链接的事实意味着不可能从另一个翻译单元调用 foo
,因为不可能在另一个翻译单元中声明 foo
, 因为没有办法写 foo
的参数类型的名称。任何在另一个翻译单元中定义 A
的尝试实际上都会定义不同的类型。
因此,虽然名称 foo
在技术上具有外部链接,但实际上不能被其他翻译单位引用。
namespace { class A { } ; }
void foo ( A ) // _Z3fooN12_GLOBAL__N_11AE
{ ; }
显然,函数的符号将引用 A 的名称,它是唯一命名的命名空间的成员(由于 this)。
foo 的链接是什么?
函数 foo
具有外部链接,因为它是全局的且未声明 [=11=]。函数的链接不依赖于参数。
A
具有内部链接的事实意味着不可能从另一个翻译单元调用 foo
,因为不可能在另一个翻译单元中声明 foo
, 因为没有办法写 foo
的参数类型的名称。任何在另一个翻译单元中定义 A
的尝试实际上都会定义不同的类型。
因此,虽然名称 foo
在技术上具有外部链接,但实际上不能被其他翻译单位引用。