STL Map是否自动初始化值?

Cas*_*ton 15 c++ stl map

可能重复:
为什么在STL映射中用作值的类需要...中的默认构造函数?

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

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

map<string, int> myMap;
cout << myMap["Hey"];
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*eek 23

标准:

ISO/IEC14882§23.4.4.3

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

  1. 效果:如果x地图中没有等效的键,则插入value_type(x, T())到地图中.
  2. 要求: key_type应该是CopyConstructible,mapped_type应该是DefaultConstructible.
  3. 返回:mapped_type对应的xin的引用*this.
  4. 复杂性:对数.

因此,不仅可以保证,而且如果之前没有条目,则评估myMap["Hey"]还会将值0 插入到映射中.

  • 你还必须知道`int()== 0`. (4认同)

xto*_*ofl 8

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

 A call to this function is equivalent to:
 insert(
    make_pair(x,T())
 );
Run Code Online (Sandbox Code Playgroud)

这将转化为

 insert(make_pair("Key", int()));
Run Code Online (Sandbox Code Playgroud)

所以是的:你的价值一开始就是零.

  • 这不是默认构造.这是价值建构.这非常重要; default-construct`int`具有未定义的值,而value-construct`int`s具有值'0` (3认同)
  • 更正:这是值初始化,而不是构造.显然.点是它不是默认构造:) (2认同)