2
namespace { class A { } ; }

void foo ( A ) // _Z3fooN12_GLOBAL__N_11AE
{ ; } 

関数のシンボルは、明らかに、一意に名前が付けられた名前空間のメンバーである A の名前を参照します (これにより)。

fooのリンケージは何ですか?

4

1 に答える 1

3

この関数fooはグローバルで宣言されていないため、外部リンケージがありstaticます。関数のリンケージはパラメーターに依存しません。

A内部リンケージを持つという事実は、のパラメータの型の名前を記述する方法がないため、他の翻訳単位でfoo宣言することは不可能であるため、別の翻訳単位から呼び出すことができないことを意味します。別の翻訳単位で定義しようとすると、実際には別の型が定義されます。foofooA

したがって、名前にfooは技術的には外部リンクがありますが、実際には他の翻訳単位から参照することはできません。

于 2017-01-13T00:26:14.917 に答える