【问题标题】:Anonymous Namespace匿名命名空间
【发布时间】:2010-09-09 03:42:31
【问题描述】:

SO 上的recent thread 触发了这个。

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

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

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

  namespace unique { namespace-body } 
  using namespace unique;

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

【问题讨论】:

  • 顺便说一下,技术术语是“未命名的命名空间”。

标签: c++ namespaces anonymous


【解决方案1】:

现在存在的规范于 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
}

【讨论】:

  • 其实我没有完全理解。 Deos这意味着显示的代码sn-p应该在当前标准中格式正确?
  • 是的 - using ::f 跟在 using namespace UNIQUE 后面。因此UNIQUE::f在代码引用::f的位置被注入到全局命名空间中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
相关资源
最近更新 更多