Heim > Artikel > Backend-Entwicklung > Können Sie Konstruktorinitialisierer für Array-Mitglieder in C verwenden?
Konstruktorinitialisierer für Array-Mitglieder in C
Bei der Arbeit mit Arrays von Objekten in C kann deren ordnungsgemäße Initialisierung eine herausfordernde Aufgabe sein. In diesem Artikel werden die Einschränkungen und Problemumgehungen für die Verwendung von Konstruktorinitialisierern für Array-Mitglieder untersucht.
Nicht-Array-Initialisierung
Im Nicht-Array-Beispiel kann die Strukturleiste ihre initialisieren Mitglied foo unter Verwendung eines Konstruktorinitialisierers:
struct Bar { Foo foo; Bar() : foo(4) {} };
Array-Initialisierung
Im Array-Beispiel kann die Struktur Baz jedoch ihr Array-Mitglied foo nicht mit derselben Syntax initialisieren :
struct Baz { Foo foo[3]; // Incorrect Baz() : foo[0](4), foo[1](5), foo[2](6) {} };
Einschränkungen
In C fehlt Arrays die Konstruktorunterstützung. Daher werden Array-Mitglieder standardmäßig initialisiert, bevor eine Objektinitialisierung stattfindet. Daher ist es nicht möglich, Array-Mitglieder direkt mithilfe von Konstruktorinitialisierern zu initialisieren.
Problemumgehung
Die in der Frage bereitgestellte Lösung besteht darin, eine Problemumgehung anzuwenden. Da STL-Konstrukte wie std::vector nicht verfügbar sind, wird ein Standardkonstruktor mit einer expliziten init()-Methode für die Initialisierung nach der Konstruktion erstellt. Dadurch entfällt die Notwendigkeit von Konstruktorinitialisierern insgesamt.
Alternative Lösung
Barrys Antwort legt einen neueren Ansatz nahe. Wenn die Entwicklungsumgebung C-Standards über C 98 hinaus unterstützt, ist eine neuere Syntax verfügbar:
struct Baz { Foo foo[3]{4, 5, 6}; };
Diese Syntax ermöglicht die Initialisierung von Array-Mitgliedern mit geschweiften Klammern, sodass kein Standardkonstruktor und keine explizite Initialisierungsmethode erforderlich sind.
Das obige ist der detaillierte Inhalt vonKönnen Sie Konstruktorinitialisierer für Array-Mitglieder in C verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!