4

最近关于 SO 的一个线程触发了这一点。

匿名命名空间被认为等同于

  namespace unique { /* empty body */ } 
  using namespace unique; 
  namespace unique { namespace-body }

我不记得为什么它不等同于的确切原因

  namespace unique { namespace-body } 
  using namespace unique;

也尝试搜索(包括谷歌)但徒劳无功。请分享您在这方面的任何信息。

4

1 回答 1

4

现在存在的规范于 1995 年在N0783中引入,以纠正角落情况。引用那篇论文(第 9 页):

WP 将未命名命名空间的语义定义为等价于:

namespace UNIQUE {
    // namespace body
}
using namespace UNIQUE;

这是不正确的,因为它使未命名命名空间中的代码取决于代码是在原始命名空间中还是在命名空间扩展中。

namespace {} // If you remove this line, the
             // use of ::f below is invalid

namespace {
    void f()
    {
        using ::f;
    }
}

应更改 WP 以将未命名的命名空间定义为等同于:

namespace UNIQUE {}
using namespace UNIQUE;
namespace UNIQUE {
    // namespace body
}
于 2010-09-09T04:02:29.963 回答