std::array の値埋め込みコンストラクターの欠如: 見落としまたは意図的な設計?
に fill メソッドが存在するにもかかわらずstd::array では、すべての要素に単一の値を割り当てることができますが、値を引数として受け取るコンストラクターが存在しないため、開発者の間で疑問が生じました。 std::vector のような動的コンテナーはそのようなコンストラクターを提供しますが、std::array にはなぜこの機能がないのですか?
設計上の決定の背後にある
std::array はこれは、ユーザーが宣言したコンストラクターを持たないことを意味する集合体として設計されています。集約は、ユーザー定義のコンストラクターや基本クラスを持たないメンバーのみで構成されるデータ構造です。これらの構築はコンパイラによって自動的に処理されます。
デフォルトの構築と集合体の初期化
std::array などの集合体型のデフォルトの構築では、メモリが初期化されません。クラスとは異なり、デフォルトの構築ではメンバーごとの初期化が呼び出されません。型が自明に初期化可能な場合、メモリには不定の値が含まれます。
代替アプローチ
std::array に特定の値を埋めるには、fill メソッドを使用できます。配列がデフォルトで構築された後に使用されます。デフォルトの構築では、通常の構築のように配列をゼロにするのではなく、初期化されていない値で配列を初期化します。これにより、すべての要素を -1 で初期化する例のように、ゼロ以外の値で埋めることができます。
結論
std には値を埋めるコンストラクターが存在しません。 :array は見落としではなく、意図的な設計上の決定です。 std::array は集約としてのステータスであるため、ユーザーが宣言したコンストラクターは使用できませんが、デフォルトの構築とその後の fill メソッドの使用により、単一の値で配列を初期化する代替方法が提供されます。
以上がstd::array に値を埋めるコンストラクターがないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。