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

标签 c++ namespaces

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

关于C++ 未命名(匿名)命名空间定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13622781/

相关文章:

c++ - 输入数字时出现循环错误

c++ - 持有锁时 fork

Django 错误 u "'polls"不是已注册的命名空间

c++ - 匿名命名空间

github - 在拉取请求中保留/丢弃贡献者的命名空间的礼节是什么?

xml - XQuery:省略不包含 namespace 的源文档的 namespace

c++ - 如何使用 SDL2 在 C++ 中将框渲染到屏幕?

c++ - 是否可以保证不会在 C++ 中优化执行内存写入的代码?

c++ - 如何在 Arduino 中获得连续的 LED 闪光灯? [C/C++]

python-3.x - 导入模块问题(项目名称和模块名称相同)