C 配列のコンストラクターの初期化
C でのオブジェクトの配列の初期化は、それに類似した配列初期化構文がないため、困難になる場合があります。配列以外のオブジェクトで使用できます。
次の配列以外の例を考えてみましょう:
struct Foo { Foo(int x) { /* ... */ } }; struct Bar { Foo foo; Bar() : foo(4) {} };
この例では、Bar コンストラクターは初期化構文 : foo(4) を使用して foo メンバー オブジェクトを初期化します。 ).
ただし、配列の場合は状況が異なります。次の構文は正しくありません:
struct Foo { Foo(int x) { /* ... */ } }; struct Baz { Foo foo[3]; // ??? I know the following syntax is wrong, but what's correct? Baz() : foo[0](4), foo[1](5), foo[2](6) {} };
解決策
残念ながら、C 98 のコンテキストでは (組み込みプロセッサによって提案されているように、ここではこれが当てはまるようです)制限)、コンストラクター初期化子を使用して配列メンバーの初期化を実現する方法はありません。回避策は、配列メンバーにデフォルトのコンストラクターを提供し、コンストラクター内で必要な初期化を実行することです。
例:
struct Foo { Foo() : value(0) { /* ... */ } // Default constructor with a default value Foo(int x) { /* ... */ } }; struct Baz { Foo foo[3]; Baz() { foo[0] = Foo(4); foo[1] = Foo(5); foo[2] = Foo(6); } };
このアプローチは直接初期化ほど洗練されていませんが、組み込み環境では利用できない可能性のある外部初期化メソッドや STL 構造に頼ることなく、オブジェクトの配列を作成および初期化できます。
以上が組み込み環境でオブジェクトの C 配列を初期化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。