Memulakan Ahli Tatasusunan dalam Senarai Pemula Pembina
C menyediakan keupayaan untuk memulakan ahli kelas menggunakan senarai pemula ahli dalam pembina. Walau bagaimanapun, memulakan ahli tatasusunan dengan cara ini boleh menghadapi ralat penyusunan.
Coretan kod di bawah menunjukkan percubaan pemulaan ahli tatasusunan dalam senarai pemula pembina, tetapi gagal untuk menyusun:
class C { public: C() : arr({1,2,3}) { // doesn't compile } /* C() : arr{1,2,3} // doesn't compile either } */ private: int arr[3]; };
Punca isu ini terletak pada sekatan untuk memulakan tatasusunan. Tatasusunan hanya boleh dimulakan melalui sintaks tugasan ('='), seperti yang dilihat dalam contoh berikut:
int arr[3] = {1,3,4};
Soalan dan Jawapan:
1 . Bagaimana untuk Memulakan Tatasusunan dalam Senarai Pemula Pembina?
Untuk memulakan tatasusunan dalam senarai pemula pembina, seseorang mesti menggunakan struct yang mengandungi tatasusunan sebagai pembolehubah ahli:
struct ArrStruct { int arr[3]; ArrStruct() : arr{1,2,3} { } }; class C { public: C() : arr_struct(ArrStruct()) { } private: ArrStruct arr_struct; };
Pendekatan ini melibatkan mencipta struct berasingan untuk memegang tatasusunan dan kemudian memulakan struct dalam pembina.
2. C 03 Standard dan Array Initialization
Standard C 03 tidak secara eksplisit menangani pengamulaan agregat (termasuk tatasusunan) dalam senarai pemula pembina. Ketaksahan kod dalam contoh asal berpunca daripada peraturan am yang melarang pemulaan langsung agregat melalui senarai pemula.
3. C 11 List Initialization
C 11 list initialization menyediakan penyelesaian kepada masalah ini. Walau bagaimanapun, sintaks dalam soalan asal adalah tidak betul. Sintaks yang betul ialah:
struct A { int foo[3]; A() : foo{1, 2, 3} { } };
Menggunakan pendakap kerinting secara langsung mencetuskan ciri permulaan senarai C 11.
Atas ialah kandungan terperinci Bolehkah anda memulakan tatasusunan dalam senarai pemula pembina C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!