Semasa cuba untuk memulakan tatasusunan ahli dengan senarai pemula, anda menghadapi ralat pengkompil: jenis tidak serasi dalam tugasan daripada 'std::initializer_list
Daripada pembina senarai pemula, anda boleh memilih variadic pembina templat:
<code class="cpp">struct Foo { int x[2]; template <typename... Ts> Foo(Ts... ts) : x{ts...} {} };</code>
Dengan pendekatan ini, anda boleh memulakan objek Foo anda seperti berikut:
<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>
Jika pemalar tidak penting, anda boleh memulakan tatasusunan dalam badan fungsi selepas melangkau pemulaan dalam pembina:
<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>
Kaedah ini, walau bagaimanapun, tidak mempunyai semakan sempadan masa kompilasi yang ditawarkan oleh templat variadic pembina.
Atas ialah kandungan terperinci Bagaimana untuk Memulakan Tatasusunan Ahli C dengan Senarai Pemula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!