Bagaimana std :: vector <bool> terjadi?


15

Hari ini, hampir semua pengembang C ++ setuju bahwa std::vector<bool>itu kesalahan karena menipu bukan wadah, dan kasus penggunaannya sebagian besar tumpang tindih dengan yang ada std::bitset.

Bagaimana itu bisa dipilih ke dalam standar? Apakah itu kontroversial pada saat itu? Apa argumen pendukung utama?


Bukankah sudah std::vectorditulis sebelumnya std::bitset?
dan04


3
Juga, Herb Sutter menulis banyak tentang di std::vector<bool> sini dan di sini . Saya pikir jika Anda menggali lebih dalam tulisannya, Anda akan menemukan semua informasi yang Anda butuhkan.
Robert Harvey

Jawaban:


10

Dari Herb Sutter menggunakan referensi yang dikutip:

Spesialisasi vektor sengaja dimasukkan ke dalam standar untuk memberikan contoh bagaimana menulis wadah yang diproksi. "Wadah yang diproksi" adalah wadah yang objeknya tidak Anda dapatkan secara langsung; alih-alih memberi Anda petunjuk atau referensi ke objek yang terkandung, wadah proksi memberi Anda objek proxy yang dapat digunakan untuk secara tidak langsung mengakses atau memanipulasi objek yang terkandung. Koleksi proksi dapat berguna dalam kasus-kasus di mana objek dalam koleksi tidak selalu dapat diakses secara langsung seolah-olah mereka berada di memori, seperti misalnya dengan koleksi berbasis disk yang secara otomatis halaman potongan itu sendiri masuk dan keluar dari memori di bawah penutup sebagai dibutuhkan. Jadi idenya adalah untuk menunjukkan bagaimana membuat koleksi proksi memenuhi persyaratan "wadah"

Dan ya, ada diskusi saat itu.

  1. Untuk semua detail berdarah, jelajahi DejaNews dan lakukan pencarian daya untuk Subject = "vector and bool" dan Forum = " c ++ ". Diskusi berlangsung pada Januari / Februari 1997. Anda juga akan menemukan diskusi terbaru dari orang-orang yang bertanya bagaimana mematikan spesialisasi vektor; lihat bagian akhir artikel ini untuk saran saya.

Sisanya adalah sejarah. Dan saya benci melihat pertanyaan yang tidak terjawab dengan tautan yang begitu bagus.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.