Rumah > pembangunan bahagian belakang > C++ > Mengapakah `std::vector` dan `std::array` Memerlukan Sintaks Permulaan Berbeza?

Mengapakah `std::vector` dan `std::array` Memerlukan Sintaks Permulaan Berbeza?

Susan Sarandon
Lepaskan: 2024-11-06 21:09:02
asal
1158 orang telah melayarinya

Why Do `std::vector` and `std::array` Require Different Initialization Syntaxes?

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};
Salin selepas log masuk

Walau bagaimanapun, apabila ia berkaitan dengan std::arrays, pendakap kerinting berganda diperlukan:

std::array<int, 4> y{{1,2,3,4}};
Salin selepas log masuk

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 } };
Salin selepas log masuk

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 };
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan