C++ 03标准7.3.1.1 [namespace.unnamed]第1段:(和C++ 11标准也使用相似的定义)
一个不愿透露姓名的命名空间定义的行为就好像它被取代
Run Code Online (Sandbox Code Playgroud)namespace unique { /* empty body */ } using namespace unique; namespace unique { namespace-body }
为什么不简单地遵循定义?
namespace unique { namespace-body }
using namespace unique;
Run Code Online (Sandbox Code Playgroud)
附带问题:MSDN按后一种形式定义.它在技术上是否违反了标准?
你不能再这样做了
namespace { typedef int a; ::a x; }
Run Code Online (Sandbox Code Playgroud)
请注意,在随后的中namespace { ... },突然间你可以.这将是非常不一致的.
还要注意这种情况,有两种不同的有效结果
namespace A { void f(long); }
using namespace A;
namespace {
void f(int);
void g() {
::f(0);
}
}
Run Code Online (Sandbox Code Playgroud)
使用ISO C++,这将调用int版本f.使用您的替代定义,它会调用该long版本.