2017-01-13 2 views
2
namespace { class A { } ; } 

void foo (A) // _Z3fooN12_GLOBAL__N_11AE 
{ ; } 

символа функции в, по-видимому, будет ссылаться на имя А, который является членом уникального имени пространства имен (из-за this).связывания функции с параметром из безымянного пространства имен

что такое связь foo.?

ответ

3

У функции foo есть внешняя связь, так как она глобальна и не объявлена ​​static. Связь функции не зависит от параметров.

Тот факт, что A имеет внутреннюю связь подразумевает, что это не представляется возможным назвать foo из другого блока перевода, так как невозможно объявить foo в другой единице трансляции, так как нет никакого способа, чтобы написать имя типа параметра foo. Любая попытка определить A в другой единицы перевода фактически определит другой тип.

Таким образом, хотя имя foo технически имеет внешнюю связь, на него фактически нельзя ссылаться другими единицами перевода.

Смежные вопросы