【问题标题】:A variable name member of two namespaces两个命名空间的变量名成员
【发布时间】:2014-07-20 06:04:40
【问题描述】:

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

namespace A
{
    extern int a;
}

namespace B
{
    extern int A::a;
}

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

【问题讨论】:

  • 这甚至不适合我...

标签: c++ language-lawyer


【解决方案1】:

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

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] 中声明的元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多