这两个未命名的命名空间的嵌套用法之间是否存在功能差异:
namespace A { namespace {
void foo() {/*...*/}
}}
Run Code Online (Sandbox Code Playgroud)
和
namespace { namespace A {
void foo() {/*...*/}
}}}
Run Code Online (Sandbox Code Playgroud)
据我所知,两个foos都将获得每个编译单元的内部唯一标识符,并且可以使用A::foo- 但是有一个微妙的或不那么微妙的区别,我没有看到?
在C++中,将函数或变量放在匿名命名空间中会使其内部链接,即与static在文件级别上声明它相同,但却是惯用的C++.
普通命名空间中的匿名命名空间怎么样?它仍然保证内部联系吗?
// foo.cpp
void func1() {
// external linkage
}
static void func2() {
// internal linkage
}
namespace {
void func3() {
// internal linkage
}
}
namespace ns1 {
void func4() {
// external linkage
}
namespace {
void func3() {
// still internal linkage?
}
}
}
Run Code Online (Sandbox Code Playgroud)