我已经写了以下代码:
#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之前以词汇方式声明。
答案 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 ++中的声明使用前。