2014-12-24 5 views
0

Где в стандарте C++ указано, что способ определения члена переменной пространства имен вне области пространства имен является использование extern спецификатор в объявлении члена переменной?Определение переменной-члена пространства имен за пределами пространства имен

§3.4.1/14 упоминает об этом «Мимоходом»:

Если переменный член пространства имен определен вне сферы действия пространства имен тогда любое имени, которое появляется в определении член (после идентификатора-декларатора) выглядит так, как если бы определение произошло в его пространстве имен. [Пример:

namespace N { 
int i = 4; 
extern int j; 
} 
int i = 2; 
int N::j = i; // N::j == 4 
+2

** 3.1/2 ** объясняет, как «extern» является способом сделать объявление переменной, которое также не является определением. Это применяется независимо от того, какое пространство имен имеет это объявление, будь то глобальное или иное. –

ответ

5

3,1/2 Декларация является определение, если ... оно не содержит extern спецификатор (7.1.1) ...

extern не имеет ничего делать с пространствами имен - это просто способ сделать объявление переменной, которое также не является определением. Затем вы можете выбрать отдельное определение как внутри, так и вне пространства имен.

Смежные вопросы