C++ 非唯一命名空间限定查找的代码示例
S(X,m)的定义如下。3.4.3.2/2: 对于名称空间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和中的指令指定的所有名称空间Ni 它的内联命名空间集 引用自3.4.3.2/3: 给定的X::m(其中X是用户声明的命名空间)或给定的::m(其中 X是全局名称空间),如果S(X,m)是空集,则程序 他身体不好。否则,如果S(X,m)正好有一个成员,或者 引用的上下文是使用声明(7.3.3),S(X,m)是 m的所需声明集。否则如果使用m 不允许从S(X,m)中选择唯一声明, 程序格式不正确。 你能举个例子来说明这个规则吗: 如果m的使用不允许使用唯一声明 从S(X,m)中选择,程序是病态的C++ 非唯一命名空间限定查找的代码示例,c++,namespaces,language-lawyer,C++,Namespaces,Language Lawyer,S(X,m)的定义如下。3.4.3.2/2: 对于名称空间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和中的指令指定的所有名称空间Ni 它的内联命名空间集 引用自3.4.3.2/3: 给定的X::m(其中X是用户声明的命名空间)或给定的::m(其中 X是全局名称空间),如果S(X,m)是空集,则程序 他身
标准草案实际上提供了一个示例,尽管不太容易找到,但在第3款下,鉴于以下情况,其如下所示:
namespace A {
using namespace Y;
void f(int);
void g(int);
int i;
}
namespace B {
using namespace Z;
void f(char);
int i;
}
namespace AB {
using namespace A;
using namespace B;
void g();
}
AB::i++; // i is not declared directly in AB so the rules are
// applied recursively to A and B,
// S is { A::i , B::i } so the use is ambiguous
// and the program is ill-formed
示例中包含以下内容:
namespace A {
using namespace Y;
void f(int);
void g(int);
int i;
}
namespace B {
using namespace Z;
void f(char);
int i;
}
namespace AB {
using namespace A;
using namespace B;
void g();
}
AB::i++; // i is not declared directly in AB so the rules are
// applied recursively to A and B,
// S is { A::i , B::i } so the use is ambiguous
// and the program is ill-formed
我的回答有意义吗?有问题吗?@ShafikYaghmour是的,我有一个问题。请看你帖子的评论。我有一个问题。除了不允许选择唯一声明的歧义声明示例之外,还有其他示例吗?@DmitryFucintv我没有看到这样的示例,我甚至不确定这是否可能。我理解你的意思。谢谢