我想了解名称空间限定名称查找规则。我试着在这个例子中这样做:
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)是X中m的所有声明的集,以及X (7.3.1)的内联命名空间集。如果S(X,m)不是空的,则S(X,m)是S (X,m);否则,S (X,m)是使用X中的-指令及其内联命名空间集命名的所有命名空间Ni的S(X,m)的并。
让X成为一个全局范围。我们有那个S(X,b)={int b=6}。这意味着名称查找必须成功。但事实上,这个计划是不正确的。我不能正确理解这条规则吗?
发布于 2014-06-04 17:31:54
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.
https://stackoverflow.com/questions/24043802
复制相似问题