Apabila menggunakan senarai pemula untuk memulakan bekas, mungkin telah melihat perbezaan dalam sintaks antara std::vector dan std::array. Semasa std::vector membuat permulaan menggunakan pendakap kerinting tunggal {}, std::array memerlukan pendakap kerinting berganda {{}}. Untuk memahami sebab perbezaan ini wujud, kami menyelidiki sifat asas bekas ini.
Tidak seperti std::vector, yang mempunyai pembina yang ditentukan pengguna, std::array dianggap sebagai jenis agregat. Ini bermakna ia tidak mempunyai pembina yang diisytiharkan pengguna, termasuk yang menerima senarai pemula. Oleh itu, pemulaan std::array bergantung pada pemulaan agregat, ciri C yang diwarisi daripada C.
Dalam C , pemulaan agregat boleh dilakukan dalam dua cara:
Dengan gaya lama, pendakap tambahan boleh ditiadakan apabila memulakan dalam pengisytiharan. Walau bagaimanapun, pilihan ini tidak tersedia untuk permulaan senarai langsung.
Kecacatan CWG #1270 berusaha untuk menangani sekatan ini, membenarkan penyingkiran pendakap dalam yang lain bentuk permulaan senarai. Jika diluluskan, sintaks berikut akan menjadi sah:
std::array
Perubahan ini akan menghapuskan jurang semasa dalam sintaks antara std::vector dan std::array, memberikan konsistensi dalam amalan permulaan agregat.
Atas ialah kandungan terperinci Mengapakah `std::vector` dan `std::array` menggunakan sintaks yang berbeza untuk senarai pemula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!