Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memulakan Tatasusunan Ahli C dengan Senarai Pemula?

Bagaimana untuk Memulakan Tatasusunan Ahli C dengan Senarai Pemula?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-04 05:41:02739semak imbas

How to Initialize a C   Member Array with an Initializer List?

Ralat Tugasan Semasa Memulakan C 0x Array Ahli dengan Initializer_list

Semasa cuba untuk memulakan tatasusunan ahli dengan senarai pemula, anda menghadapi ralat pengkompil: jenis tidak serasi dalam tugasan daripada 'std::initializer_list' kepada 'const int [2]'.

Penyelesaian Menggunakan Pembina Templat Variadic

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>

Penyelesaian Menggunakan Susunan Ahli Tidak Tetap dan Permulaan dalam Badan Fungsi

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn