C でオブジェクトの配列を初期化する方法
C では、オブジェクトの配列を初期化するのは簡単そうに見えますが、いくつかの複雑な作業があります。考慮する。次の構造体とクラス定義を考慮してください。
struct Foo { Foo(int x) { /* ... */ } }; struct Bar { Foo foo; Bar() : foo(4) {} // Valid initialization }; struct Baz { Foo foo[3]; // Incorrect initialization Baz() : foo[0](4), foo[1](5), foo[2](6) {} };
foo(4) を使用した Bar の初期化は、Foo のコンストラクターを呼び出して foo メンバーを初期化するため、有効です。ただし、指定された方法で Baz を初期化しようとする試みは正しくありません。
正しい配列の初期化
Foo 型のオブジェクトが 1 つある Bar とは異なり、Baz には次のものが含まれます。同じタイプの 3 つのオブジェクト。 Baz でオブジェクトの配列を適切に初期化するには、次のアプローチを実行する必要があります。
Baz() { foo[0] = Foo(4); foo[1] = Foo(5); foo[2] = Foo(6); }
これは、配列内の各オブジェクトのコンストラクターを明示的に呼び出します。
埋め込みの回避策プロセッサ
std::vector のような標準ライブラリ コンストラクトがない場合の代替アプローチは、明示的な 初期化メソッド とともに デフォルト コンストラクター を利用することです。 init() など、構築後まで初期化を延期できます:
Baz() {} void Baz::init() { foo[0] = Foo(4); foo[1] = Foo(5); foo[2] = Foo(6); }
以上がC でオブジェクトの配列を適切に初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。