STL 映射是否自动初始化值

Does STL Map auto-initialize values?

本文关键字:初始化 映射 是否 STL      更新时间:2023-10-16

可能的重复项:
为什么在 STL 映射中用作值的类需要 ...?

当我使用地图时,值是否肯定会初始化为默认值,或者我不应该依赖它?

例如,假设我有以下代码:

map<string, int> myMap;
cout << myMap["Hey"];

这将使用我的编译器输出"0"。 这是有保证的行为吗? 这是否可能并不总是初始化为 0?

引用标准:

ISO/IEC 14882 §23.4.4.3

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

  1. 效果:如果映射中没有与x等效的键,则在映射中插入value_type(x, T())
  2. 要求:key_typeCopyConstructiblemapped_typeDefaultConstructible
  3. 返回:*thisx对应的mapped_type的引用。
  4. 复杂度:对数。

因此,它不仅是有保证的,而且如果之前没有输入值,myMap["Hey"]还会导致将值 0 插入到映射中。

它的值构造新键的值。 看看一些文档:

 A call to this function is equivalent to:
 insert(
    make_pair(x,T())
 );

这将转化为

 insert(make_pair("Key", int()));

所以是的:你的值一开始会为零。