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;