キーが存在しない場合、count[x]++; の実行後、count[x]=1、つまり int を 0 に初期化する必要があります。これはプラットフォームによって異なります。
いいえ、変わりません。値はvalue-initializedになります。したがって、型が などの基本型である場合は、int
に初期化され0
ます。これは、C++11 標準のパラグラフ 23.4.4.3/1 で指定されています。
T& operator[](const key_type& x);
1効果: マップに相当するキーがない場合x
、マップに挿入value_type(x, T())
します。
値の初期化に対応するという事実T()
は、段落 8.5/17 で指定されています。
初期化子のセマンティクスは次のとおりです。[...]
[...]
—初期化子が の場合()
、オブジェクトは value-initializedです。
[...]
最後に、パラグラフ 8.5/8 に従って:
タイプのオブジェクトを値で初期化T
するとは、次のことを意味します。
—T
デフォルトのコンストラクター (12.1) がないか、ユーザー提供または削除されたデフォルトのコンストラクターのいずれかを持たない (おそらく cv 修飾された) クラス型 (第 9 節) である場合、オブジェクトはデフォルトで初期化されます。
—T
が (おそらく cv 修飾された) 非共用体クラス型であり、ユーザー提供または削除された既定のコンストラクターがない場合、オブジェクトはゼロで初期化T
され、自明でない既定のコンストラクターがある場合は既定で初期化されます。
—T
が配列型の場合、各要素は値で初期化されます。
—それ以外の場合、オブジェクトはゼロで初期化されます。
次の問題:
存在する場合、演算子は期待どおりに動作する必要があります。つまり、値をインクリメントします。
はい(もちろんモジュロ演算子のオーバーロード)。