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

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

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

Ответы на вопрос(1)

Решение Вопроса

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

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

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

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

Ваш ответ на вопрос