17

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

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

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

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

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

4

2 回答 2

26

标准:

ISO/IEC 14882 §23.4.4.3

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

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

因此,不仅可以保证,而且如果之前没有条目,评估myMap["Hey"]也会导致值 0 被插入到映射中。

于 2012-10-15T05:09:35.183 回答
8

它的 value 构造了一个新键的值。看看一些文档

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

这将转化为

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

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

于 2012-10-15T05:05:12.437 回答