Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Tatasusunan Dimulakan dalam Senarai Pemula Ahli Pembina?

Bolehkah Tatasusunan Dimulakan dalam Senarai Pemula Ahli Pembina?

DDD
DDDasal
2024-11-18 11:21:02394semak imbas

Can Arrays Be Initialized in a Constructor's Member Initializer List?

Permulaan Tatasusunan Ahli dalam Pembina

Pertimbangkan kelas C berikut:

class C {
public:
    C() : arr({1, 2, 3}) {}
    // C() : arr{1, 2, 3} {}
private:
    int arr[3];
};

Kod cuba untuk memulakan ahli tatasusunan arr dalam senarai pemula ahli pembina. Walau bagaimanapun, ia gagal untuk menyusun.

Soalan:

  1. Adakah mungkin untuk memulakan tatasusunan dalam senarai pemula ahli pembina?
  2. Apakah yang dinyatakan oleh standard C 03 tentang situasi ini?
  3. Adakah permulaan senarai C 11 menangani isu ini?

Jawapan:

1. Permulaan Tatasusunan dalam Pembina

Ya, adalah mungkin untuk memulakan tatasusunan dalam senarai pemula ahli pembina. Walau bagaimanapun, ia memerlukan struktur perantara:

struct A {
    int foo[3];
    A(int a, int b, int c) : foo{a, b, c} {}
};

class C {
public:
    C() : foo(A(1, 2, 3)) {}
private:
    A foo;
};

2. Piawaian C 03

Piawaian C 03 tidak secara eksplisit menangani pemulaan tatasusunan dalam senarai pemula ahli. Walau bagaimanapun, peraturan am pemulaan langsung melarang memulakan tatasusunan dengan pendakap.

3. C 11 List Initialization

C 11 memperkenalkan senarai initialization, yang membenarkan pemulaan langsung tatasusunan menggunakan pendakap:

class C {
public:
    C() : arr{1, 2, 3} {}
private:
    int arr[3];
};

Dalam kes ini, sintaks menggunakan pendakap terus selepas nama tatasusunan adalah sah dan memulakan tatasusunan dalam senarai pemula ahli pembina.

Atas ialah kandungan terperinci Bolehkah Tatasusunan Dimulakan dalam Senarai Pemula Ahli Pembina?. 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