可能重复:
Why does a class used as a value in a STL map need a default constructor in …?
当我使用地图时,值肯定会被初始化为默认值,还是我不应该依赖它?
例如,假设我有以下代码:
map<string, int> myMap;
cout << myMap["Hey"];
这将与我的编译器输出“0”。这是保证的行为吗?是否有可能不会始终初始化为0?
答案 0 :(得分:21)
标准:
ISO / IEC14882§23.4.4.3
T& operator[](const key_type& x);
- 效果:如果地图中没有等效于
x
的键,请将value_type(x, T())
插入地图。- 要求:
key_type
应为CopyConstructible
,mapped_type
为DefaultConstructible
。- 返回:对
mapped_type
中与x
对应的*this
的引用。- 复杂性:对数。
醇>
因此,不仅可以保证,而且评估myMap["Hey"]
也会导致值0 插入到地图中,如果以前没有条目的话。
答案 1 :(得分:7)
它值构造新键的值。看看some documentation:
A call to this function is equivalent to:
insert(
make_pair(x,T())
);
这将转化为
insert(make_pair("Key", int()));
是的:你的价值一开始就是零。