我被要求修改的一些代码看起来像这样:
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/