ホームページ >バックエンド開発 >C++ >std::array に値の初期化を行うコンストラクターがないのはなぜですか?

std::array に値の初期化を行うコンストラクターがないのはなぜですか?

DDD
DDDオリジナル
2024-10-23 17:59:03394ブラウズ

Why Does std::array Lack a Constructor with Value Initialization?

なぜ 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。