Saiz std::array dalam Standard C
Spesifikasi C 11 untuk std::array memastikan storan dan prestasi bersebelahan setanding dengan tatasusunan biasa. Walau bagaimanapun, ia menimbulkan persoalan sama ada std::array mempunyai saiz dan susun atur memori yang sama dengan tatasusunan standard.
Menurut §23.3.2.1/2 standard, tatasusunan ialah agregat yang boleh dimulakan menggunakan sintaks:
std::array<T, N> a = { initializer-list };
Sebagai agregat, std::array mesti menyimpan nilai daripada senarai pemula secara langsung. Walaupun secara teorinya mungkin bagi std::array untuk menyimpan data tambahan atau berbeza dalam penjajaran daripada tatasusunan biasa, kemungkinan ini sangat tidak mungkin.
Dalam amalan, kebanyakan penyusun menganggap std::array sebagai blok bersebelahan memori dengan saiz dan susun atur yang sama seperti tatasusunan biasa. Tingkah laku ini disokong oleh dokumentasi pihak ketiga dan diperhatikan dalam pelbagai penyusun.
Sebagai contoh, kod berikut, yang mengakses std::array sebagai penuding tatasusunan berbilang dimensi, berfungsi seperti yang diharapkan:
std::vector<std::array<int, N>> x(M); typedef int (*ArrayPointer)[N]; ArrayPointer y = (ArrayPointer)&x[0][0]; // use y like normal multidimensional array
Berdasarkan pemerhatian ini, ia secara amnya selamat untuk diandaikan bahawa:
sizeof(std::array<int, N>) == sizeof(int) * N
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa tingkah laku ini tidak dijamin sepenuhnya oleh standard. Penyusun mempunyai sedikit fleksibiliti dalam cara mereka melaksanakan std::array, dan semakan piawaian akan datang boleh mengubah tingkah laku ini.
Atas ialah kandungan terperinci Adakah `std::array` mempunyai saiz dan susun atur memori yang sama seperti tatasusunan C biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!