Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 非唯一命名空间限定查找的代码示例_C++_Namespaces_Language Lawyer - Fatal编程技术网

C++ 非唯一命名空间限定查找的代码示例

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)是空集,则程序 他身

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)中选择,程序是病态的


标准草案实际上提供了一个示例,尽管不太容易找到,但在第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我没有看到这样的示例,我甚至不确定这是否可能。我理解你的意思。谢谢