1

私はこのようなことについて少し怖いです:

std::map<DWORD, DWORD> tmap;
  tmap[0]+=1;
  tmap[0]+=1;
  tmap[0]+=1;

DWORD は自動的に初期化されないため、tmap[0] がインクリメントされる乱数になることを常に恐れています。ランタイムが DWORD を初期化する方法を知らない場合、マップはどのようにして DWORD を初期化するかを知ることができますか?

結果が常に であることが保証されていtmap[0] == 3ますか?

4

3 に答える 3

4

はい。新しい値がマップに挿入されると、operator[]が初期化され、組み込みの数値型 (DWORDは組み込み型の typedef) の場合、これはゼロを意味します。

于 2010-05-07T08:27:41.077 に答える
3

[]新しいオブジェクトは、演算子によってマップに挿入されると、値が初期化されます。これはマップの実装によって保証されます。つまり、その意味では「自動的に」行われます。型のオブジェクトDWORD(スカラー型であると仮定) の場合、値の初期化はゼロ初期化を意味します。

23.3.1.2 で与えられた定義によるとoperator []

(*((insert(make_pair(x, T()))).first)).second

ビットは、あなたの場合にT()変わる新しいオブジェクトです。ゼロであることが保証されています。DWORD()DWORD()

于 2010-05-07T08:49:43.560 に答える
0

はい。渡したキーがoperator[]存在しない場合、 map はデフォルトでオブジェクトを作成して挿入します。あなたの場合、それはDWORD()値0をもたらすでしょう。

于 2010-05-07T08:28:43.820 に答える