Member-Array-Initialisierung in Konstruktoren
Betrachten Sie die folgende C-Klasse:
class C { public: C() : arr({1, 2, 3}) {} // C() : arr{1, 2, 3} {} private: int arr[3]; };
Der Code versucht, das zu initialisieren arr-Array-Mitglied in der Mitgliederinitialisiererliste des Konstruktors. Die Kompilierung schlägt jedoch fehl.
Fragen:
Antworten:
1. Array-Initialisierung in Konstruktoren
Ja, es ist möglich, ein Array in der Member-Initialisierungsliste eines Konstruktors zu initialisieren. Es erfordert jedoch eine Zwischenstruktur:
struct A { int foo[3]; A(int a, int b, int c) : foo{a, b, c} {} }; class C { public: C() : foo(A(1, 2, 3)) {} private: A foo; };
2. C 03-Standard
Der C 03-Standard befasst sich nicht explizit mit der Initialisierung von Arrays in Member-Initialisierungslisten. Die allgemeinen Regeln der direkten Initialisierung verbieten jedoch die Initialisierung eines Arrays mit geschweiften Klammern.
3. C 11-Listeninitialisierung
C 11 führte die Listeninitialisierung ein, die die direkte Initialisierung von Arrays mithilfe von geschweiften Klammern ermöglicht:
class C { public: C() : arr{1, 2, 3} {} private: int arr[3]; };
In diesem Fall verwendet die Syntax geschweifte Klammern direkt nach dem Array-Namen ist gültig und initialisiert das Array in der Member-Initialisierungsliste des Konstruktors.
Das obige ist der detaillierte Inhalt vonKönnen Arrays in der Member-Initialisiererliste eines Konstruktors initialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!