【发布时间】:2026-02-22 04:20:07
【问题描述】:
我对 c++ 标准中的 §7.3.4/6 有疑问:
如果名称查找在两个不同的名称中找到名称声明 命名空间,并且声明不声明相同的实体并且做 不声明函数,名称的使用格式不正确。
似乎暗示在某些情况下,同一实体在两个不同的命名空间中声明。否则就不需要“并且声明不声明同一实体”这样的措辞。
有这种情况的例子吗?请记住,使用声明并不声明任何实体。它们只是指在其他地方完成的实体声明(可能间接通过其他使用声明)。然而,使用声明正在将它们的名称引入声明性区域,但这是另一回事。
还要记住 using-directives 也没有声明任何实体。
最后观察到,命名空间成员的异常定义(使用限定名称的定义)并未在它们出现的命名空间中声明任何内容,而只是在目标命名空间中声明。
【问题讨论】:
-
我不确定这是否真的不适用于 using 声明。它说:“在两个不同的命名空间中找到一个声明 [...]”,而不是“在两个不同的命名空间中声明的实体”。
-
“记住 using-declarations 并没有声明任何实体。” 那为什么它们被称为 using-declarations?
-
还有其他没有声明任何实体的声明,例如:static_assert 声明。术语声明在标准中以两种方式使用。
-
对于它声明的成员名称?什么意思?
-
@Supremum:对于
static_assert来说,这有点小技巧,所以您可以将它们放在类定义中。不确定它是否重要。你能想到其他的例子吗?
标签: c++ namespaces declaration language-lawyer