Rumah > pembangunan bahagian belakang > C++ > Bila untuk Mengetepikan Pendakap Luar dalam Senarai Pemula C?

Bila untuk Mengetepikan Pendakap Luar dalam Senarai Pemula C?

Barbara Streisand
Lepaskan: 2024-12-17 09:27:24
asal
631 orang telah melayarinya

When to Omit Outer Braces in C   Initializer Lists?

Apabila Meninggalkan Pendakap Luar dalam Senarai Pemula

Dalam C , apabila memulakan jenis agregat seperti struct atau tatasusunan, anda mungkin menghadapi persoalan sama ada hendak menggunakan pendakap luar dalam senarai pemula. Dalam kes jenis agregat yang POD (Data Lama Biasa) dan tidak mempunyai pembina yang ditentukan pengguna, seperti std::array, pendakap luar diperlukan. Walau bagaimanapun, bagi agregat yang tidak mempunyai sekatan ini, seperti jenis terbina dalam, pendakap ini boleh ditinggalkan.

Pendakap Eksplisit untuk Agregat POD

Dalam contoh anda, std::array a1 memerlukan pendakap eksplisit kerana std::array ialah agregat dan jenis POD. Ahli pertama agregat ialah tatasusunan saiz N, di mana N diluluskan sebagai hujah templat. Untuk memulakan ahli ini secara langsung, anda perlu menggunakan pendakap tambahan untuk tatasusunan dalam. Dalam contoh kod anda yang salah:

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

pengkompil melaporkan "terlalu banyak pemula" kerana pendakap dalam tiada. Inisialisasi yang betul dengan pendakap ialah:

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

Eliding Braces untuk Agregat Bukan POD

Berbeza dengan agregat POD, agregat bukan POD seperti jenis terbina dalam tidak memerlukan pendakap luar eksplisit dalam senarai pemula. Contohnya, contoh anda:

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

tidak termasuk pendakap untuk tatasusunan dalam. Ini kerana double bukan agregat, dan senarai pemula secara langsung memulakan elemen berganda konstituen.

Cerapan Tambahan daripada Standard

Piawaian C menyediakan panduan tentang bila pendakap luar boleh ditinggalkan dalam senarai pemula:

  • Jika senarai pemula bermula dengan pendakap kiri, maka semua ahli subagregat dimulakan dan pendakap tambahan tidak diperlukan.
  • Jika senarai pemula tidak bermula dengan pendakap kiri, hanya klausa pengamula yang mencukupi diambil daripada senarai untuk diisi subagregat semasa dan mana-mana klausa selebihnya memulakan ahli agregat seterusnya.

Ini membolehkan permulaan dengan kedua-dua pendakap dan tanpa pendakap, selagi bilangan klausa pengamula sepadan dengan bilangan ahli yang akan dimulakan.

Atas ialah kandungan terperinci Bila untuk Mengetepikan Pendakap Luar dalam Senarai Pemula 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