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