std :: unordered_map初始化

Sum*_*uma 11 c++ unordered-map std

当我第一次使用operator []访问std :: unordered_map中的元素时,会自动创建它.什么(如果有的话)是关于它初始化的保证?(保证值是初始化的,还是只能构建)?

例:

std::unordered_map<void *, size_t> size;
char *test = new char[10];
size[test] += 10;
Run Code Online (Sandbox Code Playgroud)

在此序列结束时,尺寸[测试]是否保证为10?

NPE*_*NPE 25

在此序列结束时,尺寸[测试]是否保证为10?

是.在代码的最后一行中,size[test]将元素值初始化为T(),或者在这种情况下size_t():

C++ 11 23.4.4.3地图元素访问[map.access]

T& operator[](const key_type& x);

1效果:如果地图中没有等效于x的键,则将value_type(x,T())插入到地图中.

至于T(),确切的语言有点涉及,所以我将尝试引用相关的位:

C++ 11 8.5.16初始值设定项的语义如下.

- 如果初始值设定项为(),则对象进行值初始化.


8.5.7 对类型为T的对象进行值初始化意味着:

- 如果T是(可能是cv认证的)类类型......

- 如果T是(可能是cv认证的)非联盟类类型......

- 如果T是数组类型,则每个元素都是值初始化的;

- 否则,对象被零初始化.


8.5.5 零初始化 T类型的对象或引用意味着:

- 如果T是标量类型(3.9),则将对象设置为值0(零),作为整数常量表达式,转换为T;

  • @KerrekSB:我编辑了帖子来纠正语言. (2认同)