【发布时间】:2011-01-06 20:02:55
【问题描述】:
当使用未命名的命名空间时,如果它嵌套在另一个命名空间中,会有什么问题吗?例如,以下代码中 Foo1.cpp 和 Foo2.cpp 之间是否有任何真正的区别:
// Foo.h
namespace Foo
{
void fooFunc();
}
// Foo1.cpp
namespace Foo
{
namespace
{
void privateFunction()
{
...
}
}
void fooFunc()
{
privateFunction();
}
}
// Foo2.cpp
namespace
{
void privateFunction()
{
...
}
}
namespace Foo
{
void fooFunc()
{
privateFunction();
}
}
【问题讨论】:
-
导出的符号会有所不同。看看 nm 输出。
-
只是为了迂腐,技术术语是
unnamed namespace,不是匿名的。 -
联合是匿名的,命名空间是未命名的。但谁在乎:)
-
虽然这个词是
unnamed,但如果你在工具下用nm或gdb查看会叫它anonymous namespace,所以混淆是可以理解的。
标签: c++ namespaces unnamed-namespace