Вопрос по c++ – Почему функции / объекты внутри анонимного пространства имен имеют внешнюю связь?

16

Почему символы (функции и переменные), которые определены в анонимном пространстве имен, не имеют внутренней связи, как со статическим ключевым словом? Если функция не видна / недоступна снаружи, какова причина наличия внешней связи?

@ Luchian: это неправда. Сравните 3,5 / 4 между C ++ 03 и C ++ 11. Steve Jessop
Анонимные пространства имен @SteveJessop также существуют в C ++ 03 и обеспечивают внутреннюю связь. Luchian Grigore
They don't имеют внешнюю связку, но внутреннюю. Каков твой источник? Luchian Grigore
Стандарт C ++ 03, наверное. Steve Jessop

Ваш Ответ

1   ответ
37

В C ++ 03 имена с внутренней связью было запрещено использовать в качестве аргументов шаблона [*]. Таким образом, имена большинства вещей в безымянных пространствах имен имеют внешнюю связь, позволяющую использовать их с шаблонами. Вы можете явно дать имя внутренней связи в безымянном пространстве имен, объявив ееstaticтак же, как в именованном или глобальном пространстве имен.

Обе вещи изменились в C ++ 11 - имена в безымянных пространствах имен по умолчанию имеют внутреннюю связь (3.5 / 4), и имена с внутренней связью могут использоваться в качестве аргументов шаблона.

[*] для типов он должен иметь внешнюю связь. Для объектов и функций он должен иметь внешнюю связь, если егоaddress используется в качестве аргумента шаблона, хотя, например, можно использовать в качестве аргумента шаблонаvalue константного целого числа с внутренней связью.

+1, пожалуйста, можете ли вы добавить к ответу номер абзаца в стандарте C ++ 11, который говорит, что внутренняя связь по умолчанию?

Похожие вопросы