Rumah > pembangunan bahagian belakang > C++ > Adakah `std::array` Menjamin Saiz dan Reka Letak Memori yang Sama seperti Tatasusunan C Biasa?

Adakah `std::array` Menjamin Saiz dan Reka Letak Memori yang Sama seperti Tatasusunan C Biasa?

Susan Sarandon
Lepaskan: 2024-11-23 06:06:21
asal
1056 orang telah melayarinya

Does `std::array` Guarantee the Same Size and Memory Layout as a Regular C   Array?

Semantik Terjamin untuk std::array Saiz dan Reka Letak Memori

Dalam C 11, std::array menyediakan storan dan prestasi bersebelahan yang setanding dengan tatasusunan biasa. Walau bagaimanapun, keperluan standard untuk std::array menimbulkan persoalan: adakah ia semestinya mempunyai saiz dan susun atur memori yang sama dengan tatasusunan yang setara?

Menurut §23.3.2.1/2 standard C, std: :array ialah agregat yang dimulakan menggunakan senarai pemula. Memandangkan agregat tidak boleh menggunakan pembina untuk menukar data, senarai permulaan mesti secara langsung mewakili nilai yang disimpan dalam tatasusunan.

Ini menunjukkan bahawa saiz std::array mesti ditentukan oleh bilangan elemen yang dinyatakan dalam tatasusunannya. hujah templat. Selain itu, susun atur memori hendaklah sama dengan tatasusunan, tanpa sebarang data tambahan atau padding.

Walaupun standard tidak menyatakan keperluan ini secara eksplisit, ia sangat tersirat oleh sifat agregat std::array dan mandat untuk storan bersebelahan.

Ini bermakna sizeof(std::array) semestinya sama dengan sizeof(int) * N, memastikan bahawa contoh yang diberikan dalam pertanyaan asal akan berfungsi seperti yang dimaksudkan.

Dalam amalan, penyusun dan pelaksanaan biasanya mematuhi gelagat yang diharapkan ini. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa piawaian tidak menguatkuasakannya secara ketat, membuka kemungkinan pelaksanaan tidak mematuhi.

Atas ialah kandungan terperinci Adakah `std::array` Menjamin Saiz dan Reka Letak Memori yang Sama seperti Tatasusunan C Biasa?. 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