Heim >Backend-Entwicklung >C++ >Können Sie ein Array in einer C-Konstruktor-Initialisierungsliste initialisieren?
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]; };
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};
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; };
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} { } };
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!