Initialisierung von Array-Mitgliedern in Konstruktor-Initialisierungslisten
Die Unfähigkeit, Arrays in Konstruktoren mithilfe von Element-Initialisierungslisten zu initialisieren, wirft Fragen zu den zugrunde liegenden Regeln und möglichen Lösungen.
C 03 Standard- und Aggregatinitialisierung
Der C 03-Standard verbietet die Verwendung der direkten Initialisierung für Aggregattypen, einschließlich Arrays, in Mitgliedsinitialisierungslisten. Direkte Initialisierung bezieht sich auf die direkte Verwendung des Konstruktors mit Klammern, wie in den bereitgestellten Codeausschnitten zu sehen ist.
Boost::array als Lösung
Ein alternativer Ansatz ist die Verwendung eine Struktur, die das Array kapselt. Durch die Definition eines Konstruktors innerhalb der Struktur können Sie das Array bei der Objekterstellung initialisieren. Dies ähnelt dem Ansatz der Boost::array-Bibliothek.
C 11-Listeninitialisierung
C 11 führte die Listeninitialisierung ein, die eine direkte Initialisierung von Aggregaten ermöglicht , einschließlich Arrays, in Member-Initialisierungslisten. Die in der Frage genannte Syntax ist jedoch falsch. Um die Listeninitialisierung zu verwenden, müssen Sie die Array-Elemente in geschweifte Klammern einschließen:
class C { public: C() : arr{1, 2, 3} {} };
Diese Syntax initialisiert das arr-Array im Konstruktor korrekt.
Das obige ist der detaillierte Inhalt vonKönnen C-Konstruktoren Arrays direkt in Member-Initialisiererlisten initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!