Bolehkah Anda Menggunakan Pemula Pembina untuk Ahli Array dalam C?

Barbara Streisand
Lepaskan: 2024-11-07 08:33:02
asal
110 orang telah melayarinya

Can You Use Constructor Initializers for Array Members in C  ?

Pemula Pembina untuk Ahli Tatasusunan dalam C

Apabila bekerja dengan tatasusunan objek dalam C, memulakannya dengan betul boleh menjadi tugas yang mencabar. Artikel ini meneroka had dan penyelesaian untuk menggunakan pemula pembina untuk ahli tatasusunan.

Permulaan Bukan Tatasusunan

Dalam contoh bukan tatasusunan, Bar struct boleh memulakannya ahli foo menggunakan pemula pembina:

struct Bar {
    Foo foo;

    Bar() : foo(4) {}
};
Salin selepas log masuk

Permulaan Tatasusunan

Walau bagaimanapun, dalam contoh tatasusunan, struct Baz tidak boleh memulakan ahli tatasusunannya foo menggunakan sintaks yang sama :

struct Baz {
    Foo foo[3];

    // Incorrect
    Baz() : foo[0](4), foo[1](5), foo[2](6) {}
};
Salin selepas log masuk

Keterbatasan

Dalam C , tatasusunan kekurangan sokongan pembina. Akibatnya, ahli tatasusunan dimulakan secara lalai sebelum sebarang permulaan objek berlaku. Oleh itu, adalah tidak mungkin untuk memulakan ahli tatasusunan secara langsung menggunakan pemula pembina.

Penyelesaian

Penyelesaian yang disediakan dalam soalan ialah menggunakan penyelesaian. Memandangkan konstruk STL seperti std::vector tidak tersedia, pembina lalai dicipta dengan kaedah init() eksplisit untuk permulaan pasca pembinaan. Ini mengelakkan keperluan untuk pemula pembina sama sekali.

Penyelesaian Alternatif

Respons Barry mencadangkan pendekatan yang lebih terkini. Jika persekitaran pembangunan menyokong piawaian C melebihi C 98, sintaks yang lebih baharu tersedia:

struct Baz {
    Foo foo[3]{4, 5, 6};
};
Salin selepas log masuk

Sintaks ini membenarkan pengamulaan ahli tatasusunan menggunakan pendakap kerinting, menghapuskan keperluan untuk pembina lalai dan kaedah pengamulaan eksplisit.

Atas ialah kandungan terperinci Bolehkah Anda Menggunakan Pemula Pembina untuk Ahli Array dalam C?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!