Rumah >pembangunan bahagian belakang >C++ >Mengapa GCC Gagal Memulakan std::array dengan Senarai Permulaan?
Senarai Permulaan dan std::array: A GCC Bug
Kelas std::array dalam Perpustakaan Standard C menyediakan tetap- bekas tatasusunan saiz. Umumnya dipercayai bahawa kelas ini menyokong senarai pemulaan.
Walau bagaimanapun, menggunakan GCC 4.6.1, cuba untuk memulakan std::array tikar menggunakan sintaks berikut gagal:
<code class="cpp">std::array<std::string, 2> strings = { "a", "b" }; std::array<std::string, 2> strings({ "a", "b" });</code>
Walaupun senarai pemula bekerja dengan std::vector, tingkah laku ini dengan std::array telah menimbulkan persoalan tentang standard C atau isu GCC yang berpotensi.
std::array's Inner Workings
std::array pada asasnya ialah struct yang merangkum tatasusunan. Strukturnya menyerupai:
<code class="cpp">template<typename T, int size> struct std::array { T a[size]; };</code>
Tidak seperti std::vector, yang mempunyai pembina yang menerima senarai pemula, std::array tidak mempunyai pembina sedemikian.
Permulaan Agregat
Walaupun std::array tidak mempunyai pembina eksplisit untuk senarai permulaan, ia dianggap sebagai jenis agregat dalam C 11. Oleh itu, ia boleh dimulakan secara agregat. Walau bagaimanapun, untuk memulakan tatasusunan dalam struct, set tambahan pendakap kerinting diperlukan:
<code class="cpp">std::array<std::string, 2> strings = {{ "a", "b" }};</code>
Potensi Pepijat GCC
Standard C membenarkan peninggalan pendakap kerinting tambahan dalam pemulaan tersebut. Oleh itu, kemungkinan besar ketidakupayaan GCC untuk mengendalikan sintaks ini tanpanya adalah pepijat.
Atas ialah kandungan terperinci Mengapa GCC Gagal Memulakan std::array dengan Senarai Permulaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!