なぜ std::array には値の初期化を伴うコンストラクターがないのですか?
std::array は固定値を表すクラスです。 size 配列ですが、すべての要素の値を受け取るコンストラクターがありません。このようなコンストラクターがないことは、特に std::vector のような動的コンテナーに同様のコンストラクターがある場合に、不可解に思えるかもしれません。
std::array は集約型として設計されているため、この省略は意図的です。 C の集約は、データ メンバーのみで構成され、ユーザーが宣言したコンストラクターを持たないクラスです。そのため、std::array は、中括弧で囲まれた初期化子リストまたはコピー/移動構築によってのみ初期化できます。
std::array は、すべての要素に値を割り当てるための fill メソッドを提供しますが、代替ではありません。値の初期化を伴うコンストラクターの場合。 fill メソッドは、すでに構築された配列に対して動作し、その要素を初期化しますが、構築前のメモリ状態には影響しません。
std::array のすべての要素を特定の値 (-1) で初期化する必要がある場合あなたの例では)、デフォルトの構築に続いて fill:
<code class="cpp">std::array<int, 10> myArray; // default construction (uninitialized memory) myArray.fill(-1); // initialize all elements with -1</code>
デフォルトの構築を使用すると、集計のメモリがゼロにならないため、fill メソッドはゼロ化された値を上書きする必要がなく、すべての要素を正しく初期化します。この動作は、自明ではない初期化可能な型では変更される可能性があることに注意してください。
以上がstd::array に値の初期化を行うコンストラクターがないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。