std :: map <whatever,double>是否自动为零值?

时间:2018-02-01 16:31:21

标签: c++ std

如果我写:

#include <map>

int main()
{
    std::map<int, double> q;
    q[3] += 4;
    return 0;
}

我可以放心q [3]是4,而不是q [3]是4 +(来自内存的一些随机未初始化的垃圾)?

2 个答案:

答案 0 :(得分:5)

引自cppreference.com

  

如果执行插入,则映射值将进行值初始化   (默认为类类型构造,否则为零初始化)和   返回它的引用。

因此,您可以指望初始化为零的值。

编辑:

上面的引用是指C ++ 11之前的情况。 C ++ 11及更高版本的措辞难以理解,但我认为这是有效的句子:

  

使用默认分配器时,会导致密钥被复制   从key构造,映射的值被初始化。

第一个引用中的同一括号注释也适用于此处的“值初始化”一词(请参阅the page on value initialization),因此它仍然会初始化基本类型的值。

答案 1 :(得分:4)

如果地图中不存在q[3],则会为您创建该记录,并将值 初始化为零。

您的代码是安全的。