两个名称空间的变量名称成员

时间:2014-05-30 13:01:00

标签: c++ language-lawyer

让我们编写一个程序,将变量名称定义为两个名称空间的成员。

namespace A
{
    extern int a;
}

namespace B
{
    extern int A::a;
}

A::a同时是AB的成员吗?我需要证明作为标准条款的参考。

1 个答案:

答案 0 :(得分:0)

问题中的代码是非法的,无法编译。类似的问题就是这个修改过的例子:

namespace A {
   namespace B {
      extern int x; // 1
   }
   extern int B::x; // 2
}
extern int A::B::x; // 3

所有三个声明都引用完全相同的变量,在所有情况下,声明的变量都是::A::B::x类型的int

截至标准的引用,找到直接和清晰的东西并非易事,但8.3 / 1包含证明(而不是定义):

  

[...]当declarator-id被限定时,声明应引用先前声明的限定符引用的类或命名空间的成员[...]

上面明确指出,由于名称中的限定,[2]和[3]都必须引用先前声明的命名空间B的元素,在这种情况下是在[1]中声明的元素。