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

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-02 17:25:29808semak imbas

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>

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>

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!

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