如何解释标准中的以下段落?

How is the following passage from the standard to be interpreted?

本文关键字:段落 标准 何解释 解释      更新时间:2023-10-16

§3.3.6/1 (c++ 11)

名称空间定义的声明性区域是其名称空间体。表示的潜在范围original- namspace -name是由每个元素建立的声明性区域的连接名称空间定义original- namspace -name.
声明性区域的定义如下(§3.3.1/1):

每个名称都是在程序文本的某个部分引入的,称为声明性区域,这是最大的部分在该程序中,该名称是有效的,也就是说,该名称可以用作非限定名称引用同一实体. ...

这两个组合在一起似乎意味着名称空间的名称只能(不限定地)在名称空间体本身内部使用。但是,很明显,这是错误的。那么,当名称空间的名称实际上可以在名称空间体之外使用(不限定)时,名称空间定义的声明性区域作为名称空间体是什么意思呢?

还有,我完全不明白这一点(从上面重新引用):

用表示的潜在作用域original- namspace -name是由每个元素建立的声明性区域的连接名称空间定义原始名称空间名称在同一声明性区域。

标准不是谈论你的想法…

我认为您的困惑在于您错误地假设文本是关于名称空间本身的,而标准实际上是讨论在名称空间内引入的名称。


那引用的"只是没有意义"呢?

original- namespaces -name表示的潜在作用域是由与该original- namespaces -name在同一声明性区域中的每个名称空间定义建立的声明性区域的连接。


用一个例子来描述上面的内容可能是最简单的:

.--- namespace definition
|        .--- original-namespace-name
v        v
namespace N { <-------------------------------.
  int x = 0;                              <---+--- declarative region (1)
} <-------------------------------------------'

<一口>

.--- another namespace definition of `N`
|         .--- original-namespace-name
v         v
namespace N { <-------------------------------.
  int y = x;                              <---+--- declarative region (2)
} <-------------------------------------------'

: int x的潜在范围为(1)(2),即。引入了"声明性区域的连接"

  • 在这个例子中,我们有两个命名空间定义对于原始命名空间名称 N,我们也有两个声明性区域,但是"潜在作用域"在命名为N的命名空间内是(1)(2)

  • 只要命名空间定义本身位于相同的声明性区域,并且共享相同的original- namspace -name,它们引用相同的命名空间

  • 引入另一个这样的命名空间定义只会为潜在作用域(通过附加另一个声明性区域)先前在其中声明的变量增加更多的空间。


潜在作用域声明性区域;它们是什么?

  • a declarative region 是程序中可以不加限定地引用名称的部分。

  • potential scope 是名称可能有效的作用域,它是名称可以引用同一实体的整个作用域。


3.3.1p1 声明性区域和作用域 [basic.scope.declarative]

每个名称都在程序文本中称为声明性区域的某个部分引入,该区域是该名称有效的程序的最大部分,也就是说,该名称可以用作非限定名称来引用同一实体。

一般来说,每个特定的名称只在程序文本中称为作用域的可能不连续的部分内有效。为了确定声明的作用域,有时惯例是引用声明的潜在作用域

声明的作用域与其潜在作用域相同,除非潜在作用域包含另一个同名的声明。在这种情况下,内部(包含的)声明区域中声明的潜在作用域被排除在外部(包含的)声明区域中的声明作用域之外。