Вопрос по c++ – Почему функции / объекты внутри анонимного пространства имен имеют внешнюю связь?
Почему символы (функции и переменные), которые определены в анонимном пространстве имен, не имеют внутренней связи, как со статическим ключевым словом? Если функция не видна / недоступна снаружи, какова причина наличия внешней связи?
В C ++ 03 имена с внутренней связью было запрещено использовать в качестве аргументов шаблона [*]. Таким образом, имена большинства вещей в безымянных пространствах имен имеют внешнюю связь, позволяющую использовать их с шаблонами. Вы можете явно дать имя внутренней связи в безымянном пространстве имен, объявив ееstatic
так же, как в именованном или глобальном пространстве имен.
Обе вещи изменились в C ++ 11 - имена в безымянных пространствах имен по умолчанию имеют внутреннюю связь (3.5 / 4), и имена с внутренней связью могут использоваться в качестве аргументов шаблона.
[*] для типов он должен иметь внешнюю связь. Для объектов и функций он должен иметь внешнюю связь, если егоaddress используется в качестве аргумента шаблона, хотя, например, можно использовать в качестве аргумента шаблонаvalue константного целого числа с внутренней связью.