在全局范围内使用限定名称

时间:2014-06-02 09:17:03

标签: c++

我已经写了以下代码:

#include <iostream>

namespace A
{
    int z=::b;
}

int b=5;

int main()
{
    std::cout << A::z;
}

我希望它工作正常。这是因为:

  

查找以一元范围运算符::(5.1)为前缀的名称   全局范围,在使用它的翻译单元中。名字应该   在全局命名空间范围内声明或者是一个名称   由于using指令,声明在全局范围内可见   (3.4.3.2)。使用::允许引用全局名称   如果其标识符已被隐藏(3.3.10)。

这句话没有说明变量必须在使用合格的id之前以词汇方式声明。

2 个答案:

答案 0 :(得分:0)

  

名称应在全局命名空间范围内声明

你必须写:

int b=5;

namespace A
{
    int z=::b;
}

答案 1 :(得分:0)

来自 3.3.2声明点:

  

名称的声明点在其完整的声明者(第8条)之后及之前   初始化程序(如果有),除非如下所述。 [例如:

 int x = 12;
 { int x = x; }
   Here the second x is initialized with its own (indeterminate) value. — end example ]

除了类范围内的函数等异常之外,这有效地强制执行C ++中的声明使用前