„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie initialisiere ich Member-Arrays mit Initialisierungslisten in C++0x?

Wie initialisiere ich Member-Arrays mit Initialisierungslisten in C++0x?

Veröffentlicht am 08.11.2024
Durchsuche:514

How to Initialize Member Arrays with Initializer Lists in C  0x?

Mitgliedsarrays mit Initialisierungslisten initialisieren

In C 0x kann beim Versuch, ein Mitgliedsarray mit einer Initialisierungsliste zu initialisieren, der Fehler „Inkompatible Typen in der Zuweisung“ auftreten .

Um dieses Problem zu beheben, sollten Sie stattdessen einen variablen Vorlagenkonstruktor verwenden:

struct foo {
    int x[2];
    template 
    foo(T... ts) : x{ts...} {}
};

int main() {
    // Usage
    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
    foo f5(3.14);  // Error: narrowing conversion not allowed
    foo f6("foo"); // Error: no conversion from const char* to int
}

Wenn die Beibehaltung des „const“-Status nicht unbedingt erforderlich ist, können Sie alternativ eine Funktion zum Laden der Array-Werte verwenden:

struct foo {
    int x[2];
    foo(std::initializer_list il) {
        std::copy(il.begin(), il.end(), x);
    }
};

Dieser Ansatz verzichtet jedoch auf die Überprüfung der Grenzen zur Kompilierungszeit.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3