Heim  >  Artikel  >  Backend-Entwicklung  >  Können Sie Konstruktorinitialisierer für Array-Mitglieder in C verwenden?

Können Sie Konstruktorinitialisierer für Array-Mitglieder in C verwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-07 08:33:02111Durchsuche

Can You Use Constructor Initializers for Array Members in C  ?

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!

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