名称中的限定名称查找

时间:2014-06-04 17:27:31

标签: c++ namespaces qualified-name

我想了解命名空间限定名称查找规则。我试图在这个例子上做到这一点:

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}。这意味着名称查找必须成功。但事实上,该计划是不正确的。我可能不能正确理解这条规则吗?

1 个答案:

答案 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.