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

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

Linda Hamilton
Linda Hamiltonasal
2024-10-30 11:47:02915semak imbas

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>

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:
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