在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?
}
}
}
错误的假设。 anonyomus命名空间中的变量具有外部链接,除非声明为'static'。 – MSalters 2010-11-15 10:12:13
@ MSalters:我认为用C++ 11这已经改变了。 §3.5/ 4:在未命名名称空间内直接或间接声明的未命名名称空间或名称空间具有内部链接。所有其他名称空间都有外部链接.' – legends2k 2013-10-21 18:09:51
@ legends2k:这是另一个更改的一部分,它使这些名称作为模板参数有效(在C++ 03中,模板参数需要外部链接,这是由匿名名称空间中定义的常量满足的) – MSalters 2013-10-21 18:37:04