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
Susan Sarandonasal
2024-11-06 21:09:021104semak imbas

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};

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!

Kenyataan:
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