Mengapa Gelagat Mencapah std::Vector dan std::Array Initializer Lists?
Apabila memulakan objek kedua-dua std::vector dan std::array struktur data dalam C , perbezaan ketara timbul dalam sintaksnya. std::vectors boleh dimulakan dengan pendakap, seperti dalam:
std::vector<int> x{1,2,3,4};
Walau bagaimanapun, apabila ia berkaitan dengan std::arrays, pendakap kerinting berganda diperlukan:
std::array<int, 4> y{{1,2,3,4}};
Sebab kerana percanggahan ini berpunca daripada sifat asas struktur data ini. std::arrays ialah agregat—objek tanpa pembina yang ditentukan pengguna atau pun satu yang secara eksplisit mengambil std::initializer_list.
Inisialisasi dengan pendakap untuk std::arrays dengan itu berada di bawah pemulaan agregat, diwarisi daripada C. Dalam pemulaan agregat, "gaya lama" menggunakan =: digunakan:
std::array<int, 4> y = { { 1, 2, 3, 4 } };
Sintaks ini membenarkan penyingkiran pendakap tambahan dalam "pengisytiharan borang T x = { a };". Walau bagaimanapun, peraturan ini tidak meliputi bentuk permulaan senarai yang lain, termasuk yang digunakan dalam coretan kod kedua.
Laporan kecacatan CWG (#1270) menyerlahkan sekatan ini. Sekiranya resolusi yang dicadangkan diterima, penyingkiran pendakap akan dilanjutkan untuk memasukkan borang permulaan senarai lain, yang berpotensi menjadikan sintaks yang berikut sebagai sintaks yang sah:
std::array<int, 4> y{ 1, 2, 3, 4 };
Atas ialah kandungan terperinci Mengapakah `std::vector` dan `std::array` Memerlukan Sintaks Permulaan Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!