为什么在外部声明中禁止限定名称?

问题描述 投票:0回答:1

为什么只允许将extern声明引入的名称来自最内层的命名空间?如果没有的话,它将带来什么复杂性?还是仅仅是因为这部分标准是从C标准复制而来的,所以没有命名空间?

Please see the respective part of the standard

c++ namespaces extern
1个回答
0
投票

为什么禁止在外部声明中限定名称?

因为没有意义。

假设您想在名称空间foo::bar中使用foo:::baz。有两种情况

  1. foo::bar的声明可见。然后,您无需重新声明它。只需使用名称即可,如果需要可以使用。
  2. foo::bar的声明不可见。然后,您不能首先在foo以外的任何命名空间中声明它。

为什么只允许将extern声明引入的名称来自最内层的命名空间?

它们不是。它们可能来自全局名称空间,这是extern的主要用例。另一个用例是向前声明一个实体,该实体稍后将在同一名称空间中定义,这是我认为允许此类相同名称空间声明的唯一原因。

© www.soinside.com 2019 - 2024. All rights reserved.