Rumah >pembangunan bahagian belakang >C++ >Adakah Perubahan Antara Muka `std::vector::resize()` C 11 Secara Berkesan Nilai-Memulakan Elemen Baharu?

Adakah Perubahan Antara Muka `std::vector::resize()` C 11 Secara Berkesan Nilai-Memulakan Elemen Baharu?

DDD
DDDasal
2024-12-26 14:11:14362semak imbas

Does C  11's `std::vector::resize()` Interface Change Effectively Value-Initialize New Elements?

Menyiasat Gelagat std::vector::resize() dan Boost.Container's resize()

Dalam C 03, std::vector: :resize() memulakan elemen yang baru diperuntukkan dengan salinan nilai yang disediakan. C 11 memperkenalkan lebihan beban untuk membenarkan pemulaan nilai atau permulaan melalui salinan.

Menggunakan Boost.Vektor kontena, yang menyokong tiga beban ubah saiz() yang serupa dengan C 11, ujian telah dijalankan untuk mengesahkan tingkah laku. Dalam mod C 03, kedua-dua std::vector dan Boost.Container's vector berkelakuan seperti yang diharapkan, memulakan elemen baharu dengan sifar.

Walau bagaimanapun, dalam mod C 11, kedua-dua std::vector dan Boost.Container's vector masih dimulakan elemen baharu dengan sifar apabila menggunakan lebihan yang bertujuan untuk permulaan nilai. Ini menimbulkan persoalan:

Adakah perubahan antara muka C 11 std::vector::resize() benar-benar berkesan?

Hasilnya menunjukkan bahawa perubahan antara muka tidak mempunyai kesan yang dimaksudkan, kerana elemen baharu masih dimulakan dalam kedua-dua pelaksanaan.

Tambahan

Kepada menangani had pengalokasi sedia ada, penyesuai pengalokasi alternatif telah dicadangkan yang menyediakan cara yang lebih selamat dan boleh dipercayai untuk mencapai pemulaan nilai tanpa memulakan semua jenis elemen:

template <typename T, typename A=std::allocator<T>>
class default_init_allocator : public A {
  // ... implementation
};

Penyesuai ini berselang pada construct() panggilan untuk permulaan nilai, mengubahnya menjadi panggilan permulaan lalai. Ia juga mengendalikan permulaan lalai dengan betul.

Atas ialah kandungan terperinci Adakah Perubahan Antara Muka `std::vector::resize()` C 11 Secara Berkesan Nilai-Memulakan Elemen Baharu?. 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