1

我想了解命名空间限定名查找规则。我正在尝试在示例中执行此操作:

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) 是 S(Ni , m) 的并集,用于通过 X 中的 using 指令指定的所有命名空间 Ni 及其内联命名空间集。

让我们X成为一个全局范围。我们有那个S(X,b)={int b=6}。这意味着名称查找必须成功。但实际上,该程序是格式错误的。我可能没有正确理解这条规则吗?

4

1 回答 1

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.

于 2014-06-04T17:31:54.903 回答