Подтвердить что ты не робот

Статическое ключевое слово бесполезно в области пространства имен?

namespace N
{
   static int x = 5;
}

Какими могут быть значения/варианты использования объявления статической переменной в области пространства имен?

4b9b3361

Ответ 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

То же, что и объявление статики в глобальном пространстве имен, но только локально для определенного пространства имен.