Mengapakah `std::vector` dan `std::array` menggunakan sintaks yang berbeza untuk senarai pemula?

Patricia Arquette
Lepaskan: 2024-11-08 12:18:02
asal
731 orang telah melayarinya

Why do `std::vector` and `std::array` use different syntax for initializer lists?

Memahami Gelagat Initializer_list Berbeza untuk std::vector dan std::array

Apabila menggunakan senarai pemula untuk memulakan bekas, mungkin telah melihat perbezaan dalam sintaks antara std::vector dan std::array. Semasa std::vector membuat permulaan menggunakan pendakap kerinting tunggal {}, std::array memerlukan pendakap kerinting berganda {{}}. Untuk memahami sebab perbezaan ini wujud, kami menyelidiki sifat asas bekas ini.

std::array: Agregat

Tidak seperti std::vector, yang mempunyai pembina yang ditentukan pengguna, std::array dianggap sebagai jenis agregat. Ini bermakna ia tidak mempunyai pembina yang diisytiharkan pengguna, termasuk yang menerima senarai pemula. Oleh itu, pemulaan std::array bergantung pada pemulaan agregat, ciri C yang diwarisi daripada C.

Pemulaan Agregat dalam C

Dalam C , pemulaan agregat boleh dilakukan dalam dua cara:

  1. Gaya Lama: Menggunakan sintaks =:, cth., std::array y = {{1, 2, 3, 4}};
  2. Permulaan Senarai Langsung: Melepasi terus senarai pemula, cth., std::array y{1, 2, 3, 4};

Dengan gaya lama, pendakap tambahan boleh ditiadakan apabila memulakan dalam pengisytiharan. Walau bagaimanapun, pilihan ini tidak tersedia untuk permulaan senarai langsung.

Perubahan Akan Datang

Kecacatan CWG #1270 berusaha untuk menangani sekatan ini, membenarkan penyingkiran pendakap dalam yang lain bentuk permulaan senarai. Jika diluluskan, sintaks berikut akan menjadi sah:

std::array y{1, 2, 3, 4};

Perubahan ini akan menghapuskan jurang semasa dalam sintaks antara std::vector dan std::array, memberikan konsistensi dalam amalan permulaan agregat.

Atas ialah kandungan terperinci Mengapakah `std::vector` dan `std::array` menggunakan sintaks yang berbeza untuk senarai pemula?. 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