当我使用地图时,值肯定会被初始化为默认值还是我不应该依赖这个?
例如,假设我有以下代码:
map<string, int> myMap;
cout << myMap["Hey"];
这将使用我的编译器输出“0”。这是有保证的行为吗?这可能不会总是初始化为0吗?
当我使用地图时,值肯定会被初始化为默认值还是我不应该依赖这个?
例如,假设我有以下代码:
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
。- 返回:
mapped_type
对应于x
in的引用*this
。- 复杂性:对数。
因此,不仅可以保证,而且如果之前没有条目,评估myMap["Hey"]
也会导致值 0 被插入到映射中。
它的 value 构造了一个新键的值。看看一些文档:
A call to this function is equivalent to:
insert(
make_pair(x,T())
);
这将转化为
insert(make_pair("Key", int()));
所以是的:你的价值观一开始会是零。