【发布时间】:2014-07-20 06:04:40
【问题描述】:
让我们编写一个程序,将变量名定义为两个命名空间的成员。
namespace A
{
extern int a;
}
namespace B
{
extern int A::a;
}
A::a 是否同时是两个A 和B 的成员?我需要作为参考标准条款的证据。
【问题讨论】:
-
这甚至不适合我...
标签: c++ language-lawyer
让我们编写一个程序,将变量名定义为两个命名空间的成员。
namespace A
{
extern int a;
}
namespace B
{
extern int A::a;
}
A::a 是否同时是两个A 和B 的成员?我需要作为参考标准条款的证据。
【问题讨论】:
标签: c++ language-lawyer
问题中的代码是非法的,将无法编译。类似的问题是这个修改后的例子:
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] 中声明的元素。
【讨论】: