匿名命名空间

时间:2010-09-09 03:42:31

标签: c++ namespaces anonymous

SO上的recent thread触发了这一点。

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

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

我无法回想起为什么它不等同于

的确切原因
  namespace unique { namespace-body } 
  using namespace unique;

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

1 个答案:

答案 0 :(得分: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
}