Rumah >pembangunan bahagian belakang >C++ >Bolehkah Elemen Dialihkan Keluar daripada `std::initializer_list`?
inisializer_list dan Move Semantics
Jenis initializer_list dalam C sering digunakan untuk memulakan bekas dengan senarai nilai yang disertakan dengan pendakap. Walau bagaimanapun, tidak seperti bekas biasa, initializer_list tidak mengikut nilai semantik. Akibatnya, soalan biasa timbul:
Bolehkah elemen dialih keluar daripada std::initializer_list
Jawapan kepada soalan ini ialah tidak. Percubaan untuk berbuat demikian akan menghasilkan salinan, walaupun elemen yang dialihkan adalah daripada jenis bergerak sahaja. Ini kerana fungsi begin() dan end() initializer_list mengembalikan penunjuk kepada nilai const. Apabila std::move digunakan pada nilai const, hasilnya ialah rujukan rnilai tidak berubah, yang tidak boleh dialihkan secara bermakna. Sebaliknya, ia akan terikat pada parameter fungsi jenis const T&, menghasilkan semantik salinan.
Tingkah laku ini mungkin kelihatan tidak dijangka, memandangkan initializer_list bertujuan untuk menyimpan senarai objek sementara. Walau bagaimanapun, adalah dipercayai bahawa membuat jenis const atau boleh ubah mengikut budi bicara pengkompil akan membolehkan untuk permulaan statik senarai yang lebih cekap.
Kemas kini: Cadangan untuk Sokongan initializer_list bagi Jenis-Jenis Alih Sahaja
Sebagai tindak balas kepada maklum balas, cadangan ISO telah dirangka untuk menyediakan sokongan untuk jenis bergerak sahaja dalam senarai_pemula. Cadangan ini masih dalam semakan, tetapi ia menawarkan penyelesaian yang berpotensi untuk had semasa initializer_list apabila bekerja dengan jenis bergerak sahaja.
Atas ialah kandungan terperinci Bolehkah Elemen Dialihkan Keluar daripada `std::initializer_list`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!