Heim > Backend-Entwicklung > C++ > Hauptteil

Wie initialisiere ich ein C-Mitgliedsarray mit einer Initialisierungsliste?

Mary-Kate Olsen
Freigeben: 2024-11-04 05:41:02
Original
736 Leute haben es durchsucht

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

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

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!