如果我写:
#include <map>
int main()
{
std::map<int, double> q;
q[3] += 4;
return 0;
}
我可以放心q [3]是4,而不是q [3]是4 +(来自内存的一些随机未初始化的垃圾)?
答案 0 :(得分:5)
如果执行插入,则映射值将进行值初始化 (默认为类类型构造,否则为零初始化)和 返回它的引用。
因此,您可以指望初始化为零的值。
编辑:
上面的引用是指C ++ 11之前的情况。 C ++ 11及更高版本的措辞难以理解,但我认为这是有效的句子:
使用默认分配器时,会导致密钥被复制 从key构造,映射的值被初始化。
第一个引用中的同一括号注释也适用于此处的“值初始化”一词(请参阅the page on value initialization),因此它仍然会初始化基本类型的值。
答案 1 :(得分:4)
如果地图中不存在q[3]
,则会为您创建该记录,并将值 初始化为零。
您的代码是安全的。