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.
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