Rumah > pembangunan bahagian belakang > C++ > Bila hendak menggunakan Pendakap dalam Permulaan Agregat C dengan Tatasusunan?

Bila hendak menggunakan Pendakap dalam Permulaan Agregat C dengan Tatasusunan?

Barbara Streisand
Lepaskan: 2024-12-07 03:42:11
asal
367 orang telah melayarinya

When to Use Braces in C   Aggregate Initialization with Arrays?

Sintaks Pemula Kabur untuk Agregat Yang Mengandungi Tatasusunan

Dalam C , apabila memulakan agregat yang mengandungi tatasusunan, mengabaikan pendakap kerinting boleh menyebabkan kekeliruan dan ralat. Ini jelas dalam contoh berikut:

// Error: Too many initializers
std::array<A, 2> a1 = {
    {0, 0.1},
    {2, 3.4}
};

// Valid
std::array<double, 2> a2 = {0.1, 2.3};
Salin selepas log masuk

Pendakap Diperlukan untuk std::array of Structures

Contoh pertama membuang ralat kerana std::array ialah agregat dan tidak mempunyai pembina yang ditentukan pengguna. Permulaan tatasusunan dalamannya memerlukan pendakap eksplisit, seperti yang dilihat dalam versi yang diperbetulkan:

std::array<A, 2> a1 = {
    {{0, 0.1}, {2, 3.4}}
};
Salin selepas log masuk

Pendakap Tidak Diperlukan untuk std::array POD

Sebaliknya, std::array dalam contoh kedua tidak memerlukan pendakap kerana double ialah Jenis Data Lama Biasa (POD), dan pemula tatasusunan dikendalikan dengan berkesan oleh pemula lalai.

Ketekalan untuk Agregat

Prinsip memerlukan pendakap untuk ahli agregat terpakai kepada jenis agregat lain sebagai baik:

// Valid
B meow1 = {1, 2};
B bark1 = {{1, 2}};

C meow2 = {1, 2};
C bark2 = {{1, 2}};
Salin selepas log masuk

Kekaburan dalam D

Walau bagaimanapun, contoh berikut membawa kepada ralat:

// Error: Too many initializers
D meow3 = {{1, 2}, {3, 4}};
D bark3 = {{{1, 2}, {3, 4}}};
Salin selepas log masuk

Dalam D, pemula kerana foo itu sendiri adalah array. Pendakap dalam meow3 adalah samar-samar kerana ia boleh merujuk sama ada pada permulaan foo atau tatasusunan dalamannya. Untuk menyelesaikan kekaburan, pendakap eksplisit diperlukan, seperti dalam bark3.

Mekanisme untuk Memulakan Agregat

Apabila pendakap ditinggalkan dalam permulaan agregat, beberapa peraturan dikenakan:

  1. Jika pemula untuk agregat ahli bermula dengan a pendakap, ia dianggap sebagai permulaan pendakap sepenuhnya, dan semua ahli dalam pendakap dimulakan.
  2. Jika pemula tidak bermula dengan pendakap, hanya pengamula yang mencukupi diambil daripada senarai untuk memulakan ahli agregat; mana-mana pemula yang tinggal digunakan untuk ahli agregat induk seterusnya.

Contoh Tambahan

  • Pengamatan lengkap: { {1, 3, 5}, {2, 4, 6}, {3, 5, 7} }
  • Pendakap disingkirkan untuk agregat dalam: { 1, 3, 5, 2, 4, 6, 3, 5, 7 }
  • Samar-samar sintaks: { {1, 3, 5}, {2, 4, 6}, 3, 5, 7 } (tidak berpasangan sepenuhnya atau berlubang-lubang)

Atas ialah kandungan terperinci Bila hendak menggunakan Pendakap dalam Permulaan Agregat C dengan Tatasusunan?. 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