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

Susan Sarandon
Lepaskan: 2024-11-06 21:09:02
asal
999 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!

sumber:php.cn
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!