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 die Verwendung eines variadischen Vorlagenkonstruktors in Betracht ziehen:
<code class="cpp">struct foo { int x[2]; template <typename... T> 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 }</code>
Wenn die Beibehaltung des Status „const“ nicht unbedingt erforderlich ist, können Sie alternativ eine Funktion zum Laden der Array-Werte verwenden :
<code class="cpp">struct foo { int x[2]; foo(std::initializer_list<int> il) { std::copy(il.begin(), il.end(), x); } };</code>
Dieser Ansatz verzichtet jedoch auf die Überprüfung der Grenzen zur Kompilierungszeit.
Das obige ist der detaillierte Inhalt vonWie initialisiere ich Member-Arrays mit Initialisierungslisten in C 0x?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!