是否初始化了std :: map中原始类型的值?

Leo*_*Lai 11 c++ stdmap primitive-types

请考虑以下代码:

map<int,int> m;
for(int i=0;i<10000;++i) m[i]++;
for(int i=0;i<10000;++i) printf("%d",m[i]);
Run Code Online (Sandbox Code Playgroud)

我认为打印出的值是未定义的,因为原始类型没有默认构造函数,但是每次测试时我都得到10000个1.

为什么要初始化?

Jos*_*vin 13

在调用operator[]并且缺少键时,使用表达式初始化该值,该表达式mapped_type()是类类型的默认构造函数,而对于整数类型则为零初始化.

  • 嗯,实际上,你确定这是答案吗?在[map :: operator []](http://www.cplusplus.com/reference/map/map/operator [] /)上,它说:"对此函数的调用相当于:(*(( - > insert(make_pair(k,mapped_type()))).first)).second"表示对的值初始化无关紧要 (2认同)
  • 您确定使用 cplusplus.com 吗? (2认同)
  • 是的,对我来说听起来不错。我想我只会说“当键丢失时,使用表达式`mapped_type()`初始化该值,它是类类型的默认构造函数,并且是整型类型的零初始化。” (2认同)

Nik*_*ita 5

如果std :: map :: operator []不存在,则插入新值.如果执行插入,则映射值由default-constructor初始化为类类型,否则为零初始化.