Heim > Backend-Entwicklung > C++ > Hauptteil

Können Arrays in der Member-Initialisiererliste eines Konstruktors initialisiert werden?

DDD
Freigeben: 2024-11-18 11:21:02
Original
393 Leute haben es durchsucht

Can Arrays Be Initialized in a Constructor's Member Initializer List?

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];
};
Nach dem Login kopieren

Der Code versucht, das zu initialisieren arr-Array-Mitglied in der Mitgliederinitialisiererliste des Konstruktors. Die Kompilierung schlägt jedoch fehl.

Fragen:

  1. Ist es möglich, ein Array in der Member-Initialisierungsliste eines Konstruktors zu initialisieren?
  2. Was sagt der C 03-Standard zu dieser Situation?
  3. Behebt die C 11-Listeninitialisierung dieses Problem? Problem?

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;
};
Nach dem Login kopieren

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];
};
Nach dem Login kopieren

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage