2
namespace { class A { } ; }

void foo ( A ) // _Z3fooN12_GLOBAL__N_11AE
{ ; } 

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

foo 的联系是什么?

4

1 回答 1

3

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

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

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

于 2017-01-13T00:26:14.917 回答