Rumah > pembangunan bahagian belakang > C++ > Bolehkah anda memulakan tatasusunan dalam senarai pemula pembina C?

Bolehkah anda memulakan tatasusunan dalam senarai pemula pembina C?

Patricia Arquette
Lepaskan: 2024-11-16 12:41:03
asal
695 orang telah melayarinya

Can you initialize an array in a C   constructor initializer list?

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

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

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

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

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!

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