Bagaimana untuk Memulakan Tatasusunan Ahli dengan Senarai Pemula dalam C 0x?

Mary-Kate Olsen
Lepaskan: 2024-11-02 17:25:29
asal
794 orang telah melayarinya

How to Initialize Member Arrays with Initializer Lists in C  0x?

Memulakan Tatasusunan Ahli dengan Senarai Pemula

Dalam C 0x, anda mungkin menghadapi ralat "jenis tidak serasi dalam tugasan" apabila cuba memulakan tatasusunan ahli dengan senarai pemula .

Untuk menyelesaikan masalah ini, pertimbangkan untuk menggunakan pembina templat variadic sebagai ganti:

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

Jika mengekalkan status 'const' tidak penting, anda boleh menggunakan fungsi untuk memuatkan nilai tatasusunan secara alternatif. :

<code class="cpp">struct foo {
    int x[2];
    foo(std::initializer_list<int> il) {
        std::copy(il.begin(), il.end(), x);
    }
};</code>
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini melepaskan pemeriksaan had masa kompilasi.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan Tatasusunan Ahli dengan Senarai Pemula dalam C 0x?. 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