C の配列メンバーのコンストラクター初期化子
C でオブジェクトの配列を操作する場合、それらを適切に初期化するのは困難な作業になる可能性があります。この記事では、配列メンバーのコンストラクター初期化子を使用する場合の制限と回避策について説明します。
非配列の初期化
非配列の例では、構造体 Bar はその配列を初期化できます。コンストラクター初期化子を使用したメンバー foo:
struct Bar { Foo foo; Bar() : foo(4) {} };
配列の初期化
ただし、配列の例では、構造体 Baz は同じ構文を使用して配列メンバー foo を初期化できません。 :
struct Baz { Foo foo[3]; // Incorrect Baz() : foo[0](4), foo[1](5), foo[2](6) {} };
制限事項
C では、配列にはコンストラクターのサポートがありません。その結果、オブジェクトの初期化が行われる前に、配列メンバーがデフォルトで初期化されます。したがって、コンストラクター初期化子を使用して配列メンバーを直接初期化することはできません。
回避策
質問で提供されている解決策は、回避策を採用することです。 std::vector のような STL コンストラクターは使用できないため、構築後の初期化のために明示的な init() メソッドを使用してデフォルトのコンストラクターが作成されます。これにより、コンストラクター初期化子の必要性が完全に回避されます。
代替解決策
Barry の応答は、より最近のアプローチを示唆しています。開発環境が C 98 以降の C 標準をサポートしている場合は、新しい構文を使用できます。
struct Baz { Foo foo[3]{4, 5, 6}; };
この構文では、中括弧を使用して配列メンバーを初期化できるため、デフォルトのコンストラクターや明示的な初期化メソッドが不要になります。
以上がC で配列メンバーにコンストラクター初期化子を使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。