【发布时间】:2014-07-20 22:35:05
【问题描述】:
§3.3.6/1 (C++11)
namespace-definition 的声明区域是它的namespace-body。潜在范围由 original-namespace-name 是由每个 namespace-definitions 与 original-namespace-name 在同一声明区域中。...
声明性区域的定义如下(§3.3.1/1):
每个名称都在程序文本的某些部分引入,称为声明区域,这是最大的部分 该名称在其中有效的程序的名称,即该名称可用作非限定名称的程序 指代同一个实体。 ...
两者加在一起似乎意味着命名空间的名称只能在命名空间主体内部使用(不合格)。但是,很明显,这是错误的。那么,当命名空间的名称实际上可以在命名空间主体之外使用(非限定)时,命名空间定义的声明性区域作为主体意味着什么?
另外,我根本不明白这一点(从上面重新引用):
潜在范围由 original-namespace-name 是由每个 namespace-definitions 在与 original-namespace-name 相同的声明区域中。
【问题讨论】:
-
我认为“该名称可能用作非限定名称来指代同一实体”是挂断。使用不合格名称进行引用时,这意味着没有歧义。
-
恕我直言@BobbyDigital 是对的。至于最后一部分,我认为它只是说明了命名空间可以嵌套的事实,并且为了限定它们,它们的限定符使用
::连接。 -
@BobbyDigital 我不太明白,你能详细解释一下吗?
-
@Brian 重点是'be used as an unqualified name' 可以在相同的命名空间范围。
-
也许 - 没有可能的歧义 - 更清楚。我们都知道您可以在文件中使用非限定名称,但不能保证在其自己的声明区域内不会发生冲突。至少我是这么看的。
标签: c++ c++11 namespaces scope language-lawyer