Heim >Backend-Entwicklung >C++ >Können Arrays in der Member-Initialisiererliste eines Konstruktors initialisiert werden?

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

DDD
DDDOriginal
2024-11-18 11:21:02497Durchsuche

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];
};

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;
};

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!

Stellungnahme:
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