C++ 匿名命名空间

C++ 匿名命名空间,c++,namespaces,anonymous,C++,Namespaces,Anonymous,一场如此激烈的战争引发了这场战争 匿名命名空间被视为等同于 namespace unique { /* empty body */ } using namespace unique; namespace unique { namespace-body } namespace unique { namespace-body } using namespace unique; 我记不起为什么它不等同于 namespace unique { /* empty body

一场如此激烈的战争引发了这场战争

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

  namespace unique { /* empty body */ } 
  using namespace unique; 
  namespace unique { namespace-body }
  namespace unique { namespace-body } 
  using namespace unique;
我记不起为什么它不等同于

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

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

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

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

namespace UNIQUE {
    // namespace body
}
using namespace UNIQUE;
namespace UNIQUE {}
using namespace UNIQUE;
namespace UNIQUE {
    // namespace body
}
这是不正确的,因为它使未命名命名空间中的代码依赖于 代码是否位于原始命名空间或命名空间扩展中

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

namespace {
    void f()
    {
        using ::f;
    }
}
应更改WP,以将未命名命名空间定义为等效于:

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

顺便说一下,技术术语是“未命名名称空间”。实际上,我并不完全理解它。DEO这是否意味着显示的代码片段在当前标准中应该格式良好?是-使用::f的
遵循
使用命名空间唯一的
。因此,
UNIQUE::f
被注入全局名称空间中的代码引用点
::f