Rumah >pembangunan bahagian belakang >C++ >Bolehkah Anda Menggunakan Pemula Pembina untuk Ahli Array dalam 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) {} };
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) {} };
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}; };
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!