在命名空间范围之外定义命名空间的变量成员

时间:2014-12-24 13:36:12

标签: c++ c++11 language-lawyer

在C ++标准中,它是否说在命名空间范围之外定义命名空间的变量成员的方法是通过在变量成员的声明中使用extern说明符?

§3.4.1/ 14提到这个“通行证”:

  

如果命名空间的变量成员定义在范围之外   它的命名空间然后出现在定义中的任何名称   成员(在声明者身份之后)被查找,就像定义一样   该成员发生在其命名空间中。 [例如:

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

1 个答案:

答案 0 :(得分:5)

  

3.1 / 2 声明是一个定义,除非......它包含extern说明符(7.1.1)......

extern与命名空间无关 - 它只是一种使变量声明不是定义的方法。然后,您可以自由选择在命名空间内部或外部提供单独的定义。