在一个名字空间里包含一系列的声明以便简单的保证有可能发生的名字冲突是非常有用的。也就是说,名字空间的目的就是保证代码的本地化而不是给用户提供接口。例如:
#include “cizi.h”
namespace CIZI{
int a;
void f() {}
int g() {}
}
既然我们不想让名字CIZI在本文件以外被知道,那么就没有必要创建一个多余的全局名字,并且这个全局名字CIZI有可能会和其他文件的名字发生冲突。在这种情况下,我们可以简单的使得这个名字空间没有名字。
#include “cizi.h”
namespace {
int a;
void f() {}
int g() {}
}
很明显,这里必定有一些方法可以访问这个没有命名的名字空间的成员。因此,没有名字的名字空间可以通过using-directive来访问,也就是说上边这个没有名字的名字空间可以和下边的定义一样。
namespace
$inta;voidf()intg()usingnamespace
;在这里,
$$就是和合这个没有名字的名字空间唯一对应的名字。in particular,没有名字的名字空间,在不同的文件里是不同的。如我们希望的那样,没有任何方法可以访问其他translation unit里边的没有名字的名字空间的成员。