用法
下午在学习levedb源码的时候,看到version_set.cc有这样一段代码:
// Callback from TableCache::Get()
namespace {
enum SaverState {
kNotFound,
kFound,
kDeleted,
kCorrupt,
};
struct Saver {
SaverState state;
const Comparator* ucmp;
Slice user_key;
std::string* value;
};
}
定义了两个结构,这很容易。原因在于,为什么要用一个匿名的名字空间。
使用原因
对于上面的代码,使用匿名名字空间的作用在于,可以限定上文定义的两个结构只在本原文件内的作用域当中使用。相当于起到了static的作用。因为默认的全局变量都是extern的,在c中,如果想限定全局变量或者函数的作用域,可以使用static关键字。在c++当中,推荐使用匿名的名字空间来限定全局变量和函数的作用域。