Rumah >pembangunan bahagian belakang >C++ >Bilakah Pendakap Luar Diperlukan dalam Senarai Pemula C untuk `std::array` dan Agregat Serupa?

Bilakah Pendakap Luar Diperlukan dalam Senarai Pemula C untuk `std::array` dan Agregat Serupa?

Susan Sarandon
Susan Sarandonasal
2024-12-05 03:17:18801semak imbas

When Are Outer Braces Required in C   Initializer Lists for `std::array` and Similar Aggregates?

Apabila Pendakap Luar Tidak Boleh Ditinggalkan dalam Senarai Pemula

Dalam C , pendakap luar diperlukan untuk senarai pemula apabila berurusan dengan jenis tertentu struktur agregat, khususnya yang merupakan Jenis Data Lama Biasa (POD) atau kekurangan pembina yang ditentukan pengguna. Tidak seperti kebanyakan bekas dalam pustaka standard, std::array termasuk dalam kategori ini.

std::array Initialization dengan Braces

Pertimbangkan contoh berikut:

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

di mana A ialah struct dengan dua ahli data. Set tambahan pendakap yang melampirkan {0, 0.1}, {2, 3.4} adalah penting kerana ia memulakan tatasusunan dalaman std::array. Tanpanya, pengkompil akan melaporkan ralat "terlalu banyak pemula".

Permulaan Tatasusunan Terus

Tingkah laku ini serupa dengan pengamulaan tatasusunan langsung:

Aarray a1 =
{
    {0, 0.1},
    {2, 3.4}
};

Di sini, data tatasusunan dalaman bagi struct Aarray sedang dimulakan secara langsung. Tanpa pendakap luar, pengkompil akan menghadapi ralat yang sama seperti std::array.

Perbandingan dengan Jenis Skalar

Apabila memulakan tatasusunan jenis skalar seperti double, pendakap luar adalah pilihan kerana jenis skalar bukan agregat. Contohnya:

std::array<double, 2> a2 = {0.1, 2.3};

Dalam kes ini, pendakap tambahan tidak diperlukan kerana ahli data tatasusunan sudah dimulakan terus oleh senarai pemula {0.1, 2.3}.

Atas ialah kandungan terperinci Bilakah Pendakap Luar Diperlukan dalam Senarai Pemula C untuk `std::array` dan Agregat Serupa?. 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