Heim > Backend-Entwicklung > C++ > Können Sie ein Array in einer C-Konstruktor-Initialisierungsliste initialisieren?

Können Sie ein Array in einer C-Konstruktor-Initialisierungsliste initialisieren?

Patricia Arquette
Freigeben: 2024-11-16 12:41:03
Original
696 Leute haben es durchsucht

Can you initialize an array in a C   constructor initializer list?

Array-Mitglieder in Konstruktor-Initialisierungslisten initialisieren

C bietet die Möglichkeit, Klassenmitglieder mithilfe einer Element-Initialisierungsliste im Konstruktor zu initialisieren. Bei der Initialisierung eines Array-Mitglieds auf diese Weise können jedoch Kompilierungsfehler auftreten.

Der folgende Codeausschnitt zeigt den versuchten Initialisierungsversuch eines Array-Mitglieds in einer Konstruktor-Initialisiererliste, der jedoch nicht kompiliert werden kann:

class C {
public:
  C() : arr({1,2,3}) { // doesn't compile }
  /*
  C() : arr{1,2,3} // doesn't compile either }
  */
private:
  int arr[3];
};
Nach dem Login kopieren

Der Grund für dieses Problem liegt in den Einschränkungen bei der Initialisierung von Arrays. Arrays können nur durch Zuweisungssyntax ('=') initialisiert werden, wie im folgenden Beispiel zu sehen ist:

int arr[3] = {1,3,4};
Nach dem Login kopieren

Fragen und Antworten:

1 . Wie initialisiere ich ein Array in Konstruktor-Initialisierungslisten?

Um ein Array in einer Konstruktor-Initialisierungsliste zu initialisieren, muss man eine Struktur verwenden, die das Array als Mitgliedsvariable enthält:

struct ArrStruct {
  int arr[3];
  ArrStruct() : arr{1,2,3} { }
};

class C {
public:
  C() : arr_struct(ArrStruct()) { }
private:
  ArrStruct arr_struct;
};
Nach dem Login kopieren

Dieser Ansatz beinhaltet die Erstellung einer separaten Struktur zur Aufnahme des Arrays und die anschließende Initialisierung der Struktur innerhalb des Konstruktors.

2. C 03-Standard und Array-Initialisierung

Der C 03-Standard befasst sich nicht explizit mit der Initialisierung von Aggregaten (einschließlich Arrays) in Konstruktor-Initialisierungslisten. Die Ungültigkeit des Codes im Originalbeispiel ergibt sich aus allgemeinen Regeln, die die direkte Initialisierung von Aggregaten über Initialisierungslisten verbieten.

3. C 11-Listeninitialisierung

Die C 11-Listeninitialisierung bietet eine Lösung für dieses Problem. Allerdings ist die Syntax in der ursprünglichen Frage falsch. Die korrekte Syntax lautet:

struct A {
  int foo[3];
  A() : foo{1, 2, 3} { }
};
Nach dem Login kopieren

Die Verwendung von geschweiften Klammern löst direkt die Listeninitialisierungsfunktion von C 11 aus.

Das obige ist der detaillierte Inhalt vonKönnen Sie ein Array in einer C-Konstruktor-Initialisierungsliste initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage