C++03 Standard 7.3.1.1 [namespace.unnamed] paragraph 1:(和C++11 Standard也使用类似的定义)
An unnamed-namespace-definition behaves as if it were replaced by
namespace unique { /* empty body */ } using namespace unique; namespace unique { namespace-body }
为什么不简单地遵循定义呢?
namespace unique { namespace-body }
using namespace unique;
附带问题:MSDN由后一种形式定义。它在技术上是否违反标准?
最佳答案
你不能再这样做了
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++,这会调用 f
的 int
版本。使用您的替代定义,它调用 long
版本。
关于C++ 未命名(匿名)命名空间定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13622781/