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!