Heim >Backend-Entwicklung >C++ >Wie initialisiere ich ein C-Mitgliedsarray mit einer Initialisierungsliste?

Wie initialisiere ich ein C-Mitgliedsarray mit einer Initialisierungsliste?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-04 05:41:02831Durchsuche

How to Initialize a C   Member Array with an Initializer List?

Zuweisungsfehler beim Initialisieren eines C 0x-Member-Arrays mit Initializer_list

Beim Versuch, ein Member-Array mit einer Initialisiererliste zu initialisieren, tritt ein Compilerfehler auf: inkompatible Typen in der Zuweisung von 'std::initializer_list' zu 'const int [2]'.

Lösung mit Variadic-Vorlagenkonstruktor

Anstelle eines Initialisierungslistenkonstruktors können Sie sich für einen Variadic entscheiden Vorlagenkonstruktor:

<code class="cpp">struct Foo {
    int x[2];
    template <typename... Ts>
    Foo(Ts... ts) : x{ts...} {}
};</code>

Mit diesem Ansatz können Sie Ihr Foo-Objekt wie folgt initialisieren:

<code class="cpp">Foo f1(1, 2);     // OK
Foo f2{1, 2};     // Also OK
Foo f3(42);      // OK; x[1] zero-initialized
Foo f4(1, 2, 3); // Error: too many initializers</code>

Lösung mit nicht konstantem Member-Array und Initialisierung im Funktionskörper

Wenn Konstanz nicht unbedingt erforderlich ist, können Sie das Array innerhalb des Funktionskörpers initialisieren, nachdem Sie die Initialisierung im Konstruktor übersprungen haben:

<code class="cpp">struct Foo {
    int x[2]; // or std::array<int, 2> x;
    Foo(std::initializer_list<int> il) {
       std::copy(il.begin(), il.end(), x);
       // or std::copy(il.begin(), il.end(), x.begin());
       // or x.fill(il.begin());
    }
}</code>

Dieser Methode fehlt jedoch die Überprüfung der Grenzen zur Kompilierungszeit, die die variadic-Vorlage bietet Konstruktor.

Das obige ist der detaillierte Inhalt vonWie initialisiere ich ein C-Mitgliedsarray mit einer Initialisierungsliste?. 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