Bagaimana untuk Memulakan Tatasusunan Ahli C dengan Senarai Pemula?

Mary-Kate Olsen
Lepaskan: 2024-11-04 05:41:02
asal
789 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan