Apabila menggunakan senarai pemula untuk bekas C, perbezaan yang membingungkan timbul antara std::vector dan std::array. Mari kita terokai sebab di sebalik tingkah laku ini.
Masalah:
Pertimbangkan kod berikut:
std::vector<int> x{1,2,3,4}; std::array<int, 4> y{{1,2,3,4}};
Mengapa perlu menggunakan kerinting berganda pendakap untuk std::array tetapi bukan untuk std::vector?
Jawapan:
Tingkah laku berpunca daripada sifat std::array
std::array<int, 4> y = { { 1, 2, 3, 4 } };
Dalam gaya lama ini, pendakap tambahan mungkin ditinggalkan, menghasilkan kod yang setara:
std::array<int, 4> y = { 1, 2, 3, 4 };
Walau bagaimanapun, penyingkiran pendakap ini hanya dibenarkan apabila menggunakan pemula gaya lama dengan sintaks =. Inisialisasi senarai langsung, yang tidak menggunakan sintaks =, tidak membenarkan penyingkiran pendakap. Had ini dikawal oleh C 11 §8.5.1/11.
Resolusi Cadangan:
Laporan kecacatan (cacatan CWG #1270) telah dibangkitkan untuk menangani perkara ini had. Jika resolusi yang dicadangkan diterima pakai, penyingkiran pendakap akan dibenarkan untuk semua bentuk permulaan senarai, termasuk yang berikut:
std::array<int, 4> y{ 1, 2, 3, 4 };
Perubahan ini akan membawa konsistensi kepada tingkah laku std::vector dan std::array apabila menggunakan senarai pemula.
Atas ialah kandungan terperinci Mengapakah std::array memerlukan pendakap kerinting berganda untuk senarai pemula manakala std::vector tidak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!