ホームページ > バックエンド開発 > C++ > C でオブジェクトの配列を適切に初期化するにはどうすればよいですか?

C でオブジェクトの配列を適切に初期化するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-07 01:53:02
オリジナル
392 人が閲覧しました

How to Properly Initialize Arrays of Objects in C  ?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート