用法
下午在學習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++當中,推薦使用匿名的名字空間來限定全局變量和函數的作用域。