我有点害怕这样的事情:
std::map<DWORD, DWORD> tmap;
tmap[0]+=1;
tmap[0]+=1;
tmap[0]+=1;
由于DWORD没有自动初始化,我总是害怕tmap [0]是一个递增的随机数。如果运行时不知道怎么做,地图如何知道如何初始化DWORD?
是否有保证,结果始终是tmap[0] == 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。