7

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

命名的命名空间定义的行为就像它被替换为

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

为什么不简单地遵循定义?

namespace unique { namespace-body }
using namespace unique;

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

4

1 回答 1

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++,这调用intf. 使用您的替代定义,它会调用long版本。

于 2012-11-29T10:08:29.307 回答