在什么情况下,operator [] for std :: map会返回0?

Edw*_*oni 4 c++ llvm c++11

我正在使用LLVM,我遇到了以下我没写过的代码问题:

static std::map<std::string, Value*> NamedValues;
... //Lots of other code
Value *V = NamedValues["Demo string"];
return V ? V : ErrorV("V is not in NamedValues map.");
Run Code Online (Sandbox Code Playgroud)

根据我对std :: map的理解,它应该永远不会返回一个空指针(除非它没有内存?),所以我很难理解V为0表示V不在地图中.因为我的程序总是在这里收到错误,但我无法弄清楚原因.对这里发生的事情有任何帮助吗?

Dav*_*aim 6

std::map::operator [] 如果该键已存在,则返回对该值的引用;如果该键不存在,则将该键与default-construct值一起插入,并返回对该值的引用.

POD类型(如指针)在默认构造时具有零初始化.意味着如果指针nullptr的默认构造,它将具有值.

如果"Demo string"在调用之前键不存在NamedValues["Demo string"];,则映射将创建一个默认的构造指针作为值,将其构造为nullptr.

如果你想知道地图是否包含一个键,你需要使用find+ end:

if (map.find(yourKey) != map.end()){
  //the key exists
}
Run Code Online (Sandbox Code Playgroud)

编辑:
正如@ShadowRanger所指出的那样,count也可以使用.

if (map.count(yourKey)){
   //the key exists
}
Run Code Online (Sandbox Code Playgroud)