可能重复:
为什么在STL地图用作值类需要一个默认的构造函数中...?
当我使用的地图,就值肯定得到初始化为默认值,或者我不应该依赖呢?
例如,假设我有以下代码:
map<string, int> myMap;
cout << myMap["Hey"];
这将输出“0”与我的编译器。 这是保证行为? 难道这不会总是初始化为0?
可能重复:
为什么在STL地图用作值类需要一个默认的构造函数中...?
当我使用的地图,就值肯定得到初始化为默认值,或者我不应该依赖呢?
例如,假设我有以下代码:
map<string, int> myMap;
cout << myMap["Hey"];
这将输出“0”与我的编译器。 这是保证行为? 难道这不会总是初始化为0?
答曰标准:
ISO / IEC 14882§23.4.4.3
T& operator[](const key_type& x);
- 效果:如果没有键等同于
x
在地图,插入value_type(x, T())
到地图。- 要求:
key_type
应是CopyConstructible
和mapped_type
应DefaultConstructible
。- 返回:到A参考
mapped_type
对应x
在*this
。- 复杂性:对数。
因此,它不仅是有保证的,但评估myMap["Hey"]
也导致了0值被插入到地图上,如果之前有没有它的条目。
它值构建了一个新的密钥值。 看看一些文档 :
A call to this function is equivalent to:
insert(
make_pair(x,T())
);
这将转化
insert(make_pair("Key", int()));
所以,是的:你的价值将为零在第一。