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. Requires: key_type should beCopyConstructibleおよびmapped_typeshould be DefaultConstructible.
  3. 戻り値: inにmapped_type対応する への参照。x*this
  4. 複雑さ:対数。

したがって、それが保証されるだけでなく、評価myMap["Hey"]によって値 0 が以前にエントリがなかった場合にマップに挿入されます。

于 2012-10-15T05:09:35.183 に答える
8

この値は、新しいキーの値を構築します。いくつかのドキュメントを見てください:

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

これは次のように変換されます

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

はい、最初は値がゼロになります。

于 2012-10-15T05:05:12.437 に答える