让我们编写一个程序,将变量名称定义为两个名称空间的成员。
namespace A
{
extern int a;
}
namespace B
{
extern int A::a;
}
A::a
同时是A
和B
的成员吗?我需要证明作为标准条款的参考。
答案 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]中声明的元素。