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

Car*_*bon 0 c++ std

如果我写:

#include <map>

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

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

Fre*_*son 5

引用cppreference.com:

如果执行插入,则映射值是值初始化的(默认为类类型构造,否则为零初始化),并返回对它的引用.

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

编辑:

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

使用默认分配器时,这会导致密钥是从密钥构造的,并且映射的值是值初始化的.

第一个引用中的相同括号注释也适用于此处的"值初始化"一词(请参阅值初始化页面),因此它仍然会初始化基本类型的值.

  • @Carbon,不确定那是什么意思.如果没有对象的默认构造函数,我希望它失败 (3认同)
  • @Bathsheba我的评论并不是指cppreference的错误.我的意思是说答案中引用的段落取自标记的块(直到C++ 11). (3认同)