Tujuan dari segala dan semua jenis proposal "referensi string" dan "referensi array" adalah untuk menghindari menyalin data yang sudah dimiliki di tempat lain dan hanya diperlukan tampilan non-mutasi. The string_view
dimaksud adalah satu proposal tersebut; ada yang sebelumnya dipanggil string_ref
dan array_ref
juga.
Idenya adalah selalu untuk menyimpan sepasang pointer-to-pertama-elemen dan ukuran beberapa ada data array atau tali.
Kelas handle-view seperti itu dapat diedarkan dengan harga murah dan akan menawarkan operasi substring yang murah (yang dapat diimplementasikan sebagai peningkatan pointer sederhana dan penyesuaian ukuran).
Banyak penggunaan string tidak memerlukan kepemilikan string yang sebenarnya, dan string yang dimaksud sering kali sudah dimiliki oleh orang lain. Jadi ada potensi asli untuk meningkatkan efisiensi dengan menghindari salinan yang tidak dibutuhkan (pikirkan semua alokasi dan pengecualian yang dapat Anda simpan).
String C asli mengalami masalah karena terminator nol adalah bagian dari string API, sehingga Anda tidak dapat dengan mudah membuat substring tanpa memutasikan string yang mendasarinya (a la strtok
). Dalam C ++, ini mudah diselesaikan dengan menyimpan panjang secara terpisah dan membungkus pointer dan ukuran ke dalam satu kelas.
Satu kendala utama dan perbedaan dari filosofi perpustakaan standar C ++ yang dapat saya pikirkan adalah bahwa kelas "tampilan referensial" memiliki semantik kepemilikan yang sama sekali berbeda dari perpustakaan standar lainnya. Pada dasarnya, semua yang ada di pustaka standar tanpa syarat aman dan benar (jika dikompilasi, itu benar). Dengan kelas referensi seperti ini, itu tidak lagi benar. Kebenaran program Anda tergantung pada kode ambient yang menggunakan kelas-kelas ini. Jadi lebih sulit untuk memeriksa dan mengajar.