为什么只允许将extern声明引入的名称来自最内层的命名空间?如果没有的话,它将带来什么复杂性?还是仅仅是因为这部分标准是从C标准复制而来的,所以没有命名空间?
为什么禁止在外部声明中限定名称?
因为没有意义。
假设您想在名称空间foo::bar
中使用foo:::baz
。有两种情况
foo::bar
的声明可见。然后,您无需重新声明它。只需使用名称即可,如果需要可以使用。foo::bar
的声明不可见。然后,您不能首先在foo
以外的任何命名空间中声明它。 为什么只允许将extern声明引入的名称来自最内层的命名空间?
它们不是。它们可能来自全局名称空间,这是extern
的主要用例。另一个用例是向前声明一个实体,该实体稍后将在同一名称空间中定义,这是我认为允许此类相同名称空间声明的唯一原因。