C 11 では、C スタイルの配列に似ていますが、テンプレートなどの追加機能を提供する std::array データ構造が導入されました。ベースの型指定とコンパイル時のサイズ決定。ただし、一般的な疑問が生じます:明示的な初期化なしで std::array を宣言すると、各要素がデフォルトの初期化になりますか?
C 言語仕様 (§8.5/11) によれば、明示的な初期化子のないオブジェクトはすべて、デフォルトの初期化が行われます。これには std::array オブジェクトが含まれます。デフォルトの初期化では、非クラス型のオブジェクトが初期化されますが、クラス型 (std::array が該当) のオブジェクトの場合は、デフォルトのコンストラクターが呼び出されます。
ただし、cppreference のドキュメントには、デフォルトのコンストラクターは「default-配列のすべての要素を構築またはコピー構築します。」これは、std::array が各要素に対してデフォルトの初期化を実行しない可能性があることを意味します。
回答:
はい、デフォルトでは、明示的な初期化を行わずに std::array を宣言します。 C 11 仕様に従って、すべての要素がデフォルトで初期化されます。この動作は、サイズが 0 の配列とサイズが 0 以外の配列の両方に適用されます。
値の初期化とデフォルトの初期化:
値の初期化 (8.5/7) に注意してください。デフォルトの初期化とは異なります。値の初期化では、要素にそれぞれの型のデフォルト値が割り当てられます。これは通常、プリミティブ型の場合は 0 または false です。値の初期化を明示的に実行するには、空の初期化子で中かっこを使用できます。
<code class="cpp">std::array<int, 13> cxx_style_array{}; // Value-initialize all elements to 0</code>
これにより、すべての要素が明示的に int のデフォルト値 (0) に設定されます。
以上がstd::array は C 11 でデフォルトで初期化されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。