c++ - 命名空间中的未命名空间

标签 c++ namespaces

我被要求修改的一些代码看起来像这样:

namespace XXX {

namespace {

// some stuff

} // end of unnamed

// Some stuff within the scope of XXX

} // end of XXX

我很难看到将未命名的命名空间嵌入另一个命名空间的好处(如果有的话),我正在考虑将其更改为:

namespace {

// some stuff

} // end of unnamed

namespace XXX {

// Some stuff within the scope of XXX

} // end of XXX

任何意见将不胜感激。

最佳答案

它确实有实际的好处。 一个未命名的命名空间会隐藏其中的名称以防止不同的翻译单元

上面的代码之所以有效,是因为 foo 的定义在 same 翻译单元中。

假设 main() 和 foo() 的定义在不同的翻译单元中。 它会编译,因为主文件包含声明的标题。但它不会链接,因为逻辑上没有 X::(未命名的命名空间)::foo 这样的东西。

关于c++ - 命名空间中的未命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14201023/

相关文章:

php - 何时使用 `use` 或完全限定名称

php - Zend_Di(Zend 2.0 beta)和 Zend Framework 1.11

namespaces - Teamcity + NUnit - 从 dll 中排除程序集

c++ - GLM 中的模型矩阵

c++ - 有NPM之类的C++项目管理器吗?

c++ - 查找节点树的最大路径总和

c++ - 何时从非模板和非成员函数返回 T&&

c++ - 路由器后面的P2P

c++ - 我应该在命名空间中包含头文件吗?

javascript - JavaScript 中的 Java 式 OOP 和 jQuery 失败