std :: map operator []并自动创建新对象

时间:2010-05-07 08:21:40

标签: c++ stl map variable-assignment operator-keyword

我有点害怕这样的事情:

std::map<DWORD, DWORD> tmap;
  tmap[0]+=1;
  tmap[0]+=1;
  tmap[0]+=1;

由于DWORD没有自动初始化,我总是害怕tmap [0]是一个递增的随机数。如果运行时不知道怎么做,地图如何知道如何初始化DWORD?

是否有保证,结果始终是tmap[0] == 3

3 个答案:

答案 0 :(得分:4)

是。当operator[]将新值插入地图时,它是值初始化,对于内置数值类型(DWORD是内置类型的typedef)意味着零。

答案 1 :(得分:3)

新对象在[]运算符插入地图时,是值初始化。它由地图实现确保,即在这种意义上“自动”完成。对于DWORD类型的对象(假设它是标量类型),值初始化意味着零初始化。

根据23.3.1.2中给出的定义,operator []

的简写
(*((insert(make_pair(x, T()))).first)).second

T()位是新对象,在您的情况下将变为DWORD()DWORD()保证为零。

答案 2 :(得分:0)

是。如果您传递给operator[]的密钥不存在,那么map将默认构造该对象并插入它。在你的情况下,它将DWORD(),它将产生一个值0。