C ++未命名(匿名)命名空间定义

时间:2012-11-29 09:38:42

标签: c++ namespaces

C ++ 03标准7.3.1.1 [namespace.unnamed]第1段:(和C ++ 11标准也使用相似的定义)

  

unnamed-namespace-definition 的行为就好像被

取代一样
namespace unique { /* empty body */ }
using namespace unique;
namespace unique { namespace-body }

为什么不按照定义?

namespace unique { namespace-body }
using namespace unique;

附带问题:MSDN按后一种形式定义。它在技术上是否违反了标准?

1 个答案:

答案 0 :(得分:7)

你不能再这样做了

namespace { typedef int a; ::a x; }

请注意,在随后的namespace { ... }中,您可以突然发现。这将是非常不一致的。

还要注意这种情况,有两种不同的有效结果

namespace A { void f(long); }
using namespace A;

namespace { 
  void f(int);
  void g() {
    ::f(0);
  }
}

使用ISO C ++,这会调用int版本的f。使用您的替代定义,它会调用long版本。