Статическое ключевое слово бесполезно в области пространства имен?
namespace N
{
static int x = 5;
}
Какими могут быть значения/варианты использования объявления статической переменной в области пространства имен?
Ответ 1
Приложение D (функции совместимости) [С++ 03]
D2: использование ключевого слова static не рекомендуется при объявлении объектов в области пространства имен.
Используйте неназванные пространства имен, как указано в этой.
статическое ключевое слово передает внутреннюю привязку к переменным/объектам в C, а также в С++ в пространстве имен, как другие упоминали в своих сообщениях.
P.S:
Особенность Thie была недооценена в соответствии с последним проектом (n3290). В n3225 §7.3.1.1/2 присутствует, но вычеркнут.
Ответ 2
static переменная в пространстве имен (глобальная или другая) имеет внутреннюю связь. Это означает, что к нему нельзя получить доступ из других единиц перевода. Он является внутренним для единицы перевода, в которой он объявлен.
Ответ 3
С++ Standard & sect; 7.3.1.1/2:
Использование ключевого слова static устарел при объявлении объектов в пространство имен (см. приложение D); безымянное пространство имен обеспечивает превосходное альтернатива.
Если неименованное пространство имен обеспечивает превосходную альтернативу в будущем Стандарт он будет недостоверен для достижения совместимости C.
Ответ 4
То, что уже говорили другие, с дополнительной тонкостью: static вводит внутреннюю привязку, а анонимные пространства имен - нет.
Ответ 5
То же, что и объявление статики в глобальном пространстве имен, но только локально для определенного пространства имен.