So initialisieren Sie ein Array-Mitglied in einer Elementinitialisiererliste
Einführung
Initialisierung eines Das Einfügen eines Array-Mitglieds in eine Mitgliederinitialisiererliste kann wie eine einfache Aufgabe erscheinen, kann sich in der Praxis jedoch als schwierig erweisen. In diesem Artikel werden verschiedene Ansätze untersucht und häufige Fragen zu diesem Thema beantwortet.
Problem und Code
Der folgende Codeausschnitt versucht, ein Array-Mitglied im Initialisierer eines Konstruktors zu initialisieren Liste:
class C { public: C() : arr({1,2,3}) //doesn't compile {} private: int arr[3]; };
Der Code kann jedoch nicht kompiliert werden. Der Grund dafür ist, dass Arrays nur mit dem Zuweisungsoperator = initialisiert werden können, wie zum Beispiel:
int arr[3] = {1,3,4};
Lösungen
Eine Lösung besteht darin, eine Struktur zu verwenden, um das Array zu kapseln und es zu ermöglichen im Konstruktor initialisiert werden. Dies ist im Wesentlichen das, was die Boost.Array-Bibliothek tut.
C 11 führt die Listeninitialisierung ein, die verwendet werden kann Initialisiert ein Array in einer Mitgliedsinitialisiererliste. Der folgende Code würde funktionieren:
class C { public: C() : arr{1, 2, 3} { } private: int arr[3]; };
C 03
Der C 03-Standard befasst sich nicht speziell mit der Initialisierung von Aggregaten (einschließlich Arrays) in Konstruktorinitialisierern. Die Ungültigkeit des Originalcodes ist eine Folge der Regeln für die direkte Initialisierung, die die Verwendung von Initialisierungslisten für Arrays verbieten.
C 11
C 11's Listeninitialisierung Die Syntax vereinfacht die Initialisierung von Arrays in Member-Initialisierungslisten. Es ist jedoch wichtig, die richtige Syntax zu verwenden, wie oben gezeigt.
Das obige ist der detaillierte Inhalt vonWie initialisiere ich ein Array-Mitglied in einer Elementinitialisiererliste?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!