Rumah > pembangunan bahagian belakang > C++ > Adakah std::array Default-Initialized dalam C 11?

Adakah std::array Default-Initialized dalam C 11?

Linda Hamilton
Lepaskan: 2024-10-30 11:47:02
asal
1070 orang telah melayarinya

Is std::array Default-Initialized in C  11?

Permulaan Lalai std::array

C 11 memperkenalkan struktur data std::array, yang menyerupai tatasusunan gaya C tetapi menyediakan ciri tambahan seperti templat- spesifikasi jenis berasaskan dan penentuan saiz masa kompilasi. Walau bagaimanapun, persoalan biasa timbul: adakah pengisytiharan std::array tanpa pengamulaan eksplisit menghasilkan pengamulaan lalai untuk setiap elemen?

Mengikut spesifikasi bahasa C (§8.5/11), sebarang objek tanpa pemula eksplisit mengalami permulaan lalai. Ini termasuk objek std::array. Inisialisasi lalai memulakan objek bukan jenis kelas, tetapi untuk objek jenis kelas (yang std::array ialah), ia memanggil pembina lalai.

Walau bagaimanapun, dokumentasi cppreference menyebut bahawa pembina lalai "default- membina atau menyalin-membina setiap elemen tatasusunan." Ini menunjukkan bahawa std::array mungkin tidak melakukan pengamulaan lalai untuk setiap elemen.

Jawapan:

Ya, secara lalai, mengisytiharkan std::array tanpa pengamulaan eksplisit akan memulakan lalai semua elemen mengikut spesifikasi C 11. Tingkah laku ini digunakan pada tatasusunan bersaiz sifar dan bukan bersaiz sifar.

Permulaan Nilai lwn Permulaan Lalai:

Perhatikan bahawa pemulaan nilai (8.5/7) berbeza daripada permulaan lalai. Permulaan nilai memberikan elemen nilai lalai jenis masing-masing, yang biasanya sifar atau palsu untuk jenis primitif. Untuk melaksanakan pemulaan nilai secara eksplisit, seseorang boleh menggunakan pendakap kerinting dengan pemula kosong:

<code class="cpp">std::array<int, 13> cxx_style_array{}; // Value-initialize all elements to 0</code>
Salin selepas log masuk

Ini secara eksplisit menetapkan semua elemen kepada nilai lalai int, iaitu 0.

Atas ialah kandungan terperinci Adakah std::array Default-Initialized dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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