未命名的命名空间
可以声明未命名的命名空间作为优越替换为使用全局静态变量声明。
namespace { declaration-list }
备注
有一个未命名的命名空间定义语法显示上面的行为,就象它已由替换:
命名空间*唯一 ***{***列表的说明 *}
唯一的使用命名空间;
每个未命名空间具有一个标识符,分配和维护由程序和表示此处由 唯一,并且在整个程序中的其他标识符不同。 例如:
// unnamed_namespaces.cpp
// C2872 expected
namespace { int i; } // unique::i
void f() { i++; } // unique::i++
namespace A {
namespace {
int i; // A::unique::i
int j; // A::unique::j
}
}
using namespace A;
void h()
{
i++; // C2872: unique::i or A::unique::i
A::i++; // A::unique::i++
j++; // A::unique::j++
}
未命名的命名空间是变量的静态声明的优越替换。 它们允许变量和函数是显示在整个翻译单元中,,不可见的外部。 虽然在未命名的命名空间的实体可能有外部链接,它们被名称有效限定唯一到它们的翻译单元并可以从其他翻译单元不会参见。