Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Mendapat Ralat Penyusunan Apabila Memulakan std::array dengan Senarai Pemula?
Menggunakan std::array dengan Senarai Permulaan: Menyelesaikan Misteri Sintaksis
Dalam bidang struktur data C, std::array berdiri keluar dengan peruntukan memori saiz tetapnya. Walaupun kepelbagaiannya membenarkan pemula menggunakan senarai pemula, beberapa cabaran yang tidak dijangka mungkin timbul.
Enigma Sintaks
Menurut pertanyaan, percubaan untuk memulakan std::array menggunakan senarai pemula, seperti yang digambarkan di bawah, mengakibatkan ralat penyusunan:
<code class="cpp">std::array<std::string, 2> strings = { "a", "b" }; std::array<std::string, 2> strings({ "a", "b" });</code>
Walau bagaimanapun, senarai permulaan berfungsi dengan lancar dengan std::vector. Perbezaan ini menimbulkan persoalan: adakah ini salah faham tentang keupayaan std::array atau kecacatan dalam pelaksanaan Perpustakaan Standard C GNU?
Menyingkap Penyelesaian
Di sebalik scenes, std::array dibina sebagai struct:
<code class="cpp">template<typename T, int size> struct std::array { T a[size]; };</code>
Struktur ini merangkum tatasusunan, tetapi anehnya, ia tidak mempunyai pembina yang menerima senarai pemula. Namun begitu, memandangkan std::array layak sebagai agregat dalam C 11, pemulaan agregat menjadi pendekatan alternatif.
Untuk mencapai pemulaan agregat, set tambahan pendakap kerinting diperlukan untuk menyasarkan tatasusunan dalam struct:
<code class="cpp">std::array<std::string, 2> strings = {{ "a", "b" }};</code>
Anomali Penyusun
Piawaian C mencadangkan bahawa pendakap kerinting tambahan dalam contoh di atas boleh diketepikan. Walau bagaimanapun, ralat pengkompil yang dihadapi mencadangkan pepijat yang berpotensi dalam pelaksanaan GCC, yang gagal mengecam permulaan agregat.
Kesimpulan
Walaupun isu ini mungkin kelihatan membingungkan pada mulanya Sepintas lalu, kuncinya terletak pada memahami struktur asas std::array dan selok-belok permulaan agregat. Sintaks pendakap kerinting berganda menyelesaikan ralat kompilasi dan membenarkan penciptaan std::arrays menggunakan senarai pemula, seperti yang dimaksudkan oleh standard C.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat Penyusunan Apabila Memulakan std::array dengan Senarai Pemula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!