Heim  >  Artikel  >  Backend-Entwicklung  >  Wie initialisiert man Arrays von Objekten in C richtig?

Wie initialisiert man Arrays von Objekten in C richtig?

Linda Hamilton
Linda HamiltonOriginal
2024-11-07 01:53:02307Durchsuche

How to Properly Initialize Arrays of Objects in C  ?

So initialisieren Sie Arrays von Objekten in C

In C mag das Initialisieren eines Arrays von Objekten einfach erscheinen, es gibt jedoch einige Feinheiten halten. Betrachten Sie die folgenden Struktur- und Klassendefinitionen:

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) {}
};

Die Initialisierung von Bar mit foo(4) ist gültig, da sie den Konstruktor von Foo aufruft, um das foo-Mitglied zu initialisieren. Der Versuch, Baz auf die bereitgestellte Weise zu initialisieren, ist jedoch falsch.

Korrekte Array-Initialisierung

Im Gegensatz zu Bar, wo es ein einzelnes Objekt vom Typ Foo gibt, enthält Baz drei Objekte des gleichen Typs. Um das Array von Objekten in Baz ordnungsgemäß zu initialisieren, muss der folgende Ansatz gewählt werden:

Baz() {
  foo[0] = Foo(4);
  foo[1] = Foo(5);
  foo[2] = Foo(6);
}

Dadurch wird der Konstruktor für jedes Objekt im Array explizit aufgerufen.

Workaround für Embedded Prozessoren

In Ermangelung von Standardbibliothekskonstrukten wie std::vector besteht ein alternativer Ansatz darin, einen Standardkonstruktor zusammen mit einer expliziten Initialisierungsmethode zu verwenden , wie zum Beispiel init(), sodass Sie die Initialisierung bis nach der Erstellung verschieben können:

Baz() {}

void Baz::init() {
  foo[0] = Foo(4);
  foo[1] = Foo(5);
  foo[2] = Foo(6);
}

Das obige ist der detaillierte Inhalt vonWie initialisiert man Arrays von Objekten in C richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn