我想了解命名空间限定名称查找规则。我试图在这个例子上做到这一点:
namespace A
{
int a=::b; //error: ‘::b’ has not been declared
}
int b=6;
引用我的推理(3.4.3.2/2 N3797):
对于名称空间X和名称m,名称空间限定的查找集S(X, m)定义如下:设S(X,m)为所有声明的集合 of x 中的m和内联命名空间集X(7.3.1)。如果S(X,m)是 非空,S(X,m)是S(X,m);否则,S(X,m)是联合的 所有命名空间的S(Ni,m)Ni由X和中的using指令指定 它的内联命名空间集。
让X
成为全球范围。我们有S(X,b)={int b=6}
。这意味着名称查找必须成功。但事实上,该计划是不正确的。我可能不能正确理解这条规则吗?
答案 0 :(得分:0)
b属于全局范围,但必须在使用它之前声明。 喜欢
int b=6;
namespace A
{
int a=::b;
}
(N 3690 Draft)
3.4.1 Unqualified name lookup
4. A name used in global scope, outside of any function, class or user-declared namespace, shall be declared before its use in global scope.