マップを使用している場合、値は確実にデフォルトに初期化されますか、それともこれに頼るべきではありませんか?
たとえば、次のコードがあるとします。
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())
します。- Requires:
key_type
should beCopyConstructible
およびmapped_type
should beDefaultConstructible
.- 戻り値: inに
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()));
はい、最初は値がゼロになります。