Apa string_view?

string_view usulan fitur dalam C++ Perpustakaan dasar-Dasar TS(N3921) ditambahkan ke C++17

Sejauh yang saya mengerti itu adalah jenis yang mewakili beberapa jenis string "konsep" itu adalah pandangan dari setiap jenis wadah yang bisa menyimpan sesuatu yang dapat dilihat sebagai sebuah string.

  • Apakah ini benar ?
  • Harus kanonik const std::string& jenis parameter menjadi string_view ?
  • Apakah ada hal lain yang penting tentang string_view untuk mengambil yang menjadi pertimbangan ?
Mengomentari pertanyaan (1)
Larutan

Tujuan dari setiap dan semua jenis "string referensi" dan "referensi array" proposal ini adalah untuk menghindari menyalin data yang sudah dimiliki di tempat lain dan yang satunya non-merubah tampilan diperlukan. The string_view yang dimaksud adalah satu proposal tersebut; ada sebelumnya yang disebut string_ref dan array_ref, juga.

Idenya adalah selalu untuk menyimpan sepasang pointer-ke-pertama-elemen dan ukuran dari beberapa ada data array atau string.

Seperti melihat-handle kelas bisa diedarkan dengan harga murah dengan nilai dan akan menawarkan murah substringing operasi (yang dapat diimplementasikan sebagai sederhana pointer penambahan dan penyesuaian ukuran).

Banyak menggunakan string don't memerlukan sebenarnya memiliki string dan string tersebut akan sering sudah dimiliki oleh orang lain. Jadi ada yang tulus potensi untuk meningkatkan efisiensi dengan menghindari yang tidak dibutuhkan salinan (pikirkan semua alokasi dan pengecualian anda bisa menyimpan).

Asli C string yang menderita masalah yang null terminator adalah bagian dari string Api, dan sehingga anda tidak't mudah membuat substring tanpa bermutasi yang mendasari string (a la strtok). Dalam C++, ini lebih mudah diselesaikan dengan menyimpan suhu udara secara terpisah dan pembungkus pointer dan ukuran dalam satu kelas.

Salah satu kendala utama dan perbedaan dari C++ standar library filosofi yang dapat saya pikirkan adalah bahwa "referensial melihat" kelas harus benar-benar berbeda kepemilikan semantik dari sisa perpustakaan standar. Pada dasarnya, segala sesuatu yang lain di perpustakaan standar adalah tanpa syarat aman dan benar (jika mengkompilasi, it's benar). Dengan referensi kelas seperti ini, yang's tidak lagi benar. Kebenaran dari program anda tergantung pada ambient kode yang menggunakan kelas-kelas ini. Sehingga's sulit untuk memeriksa dan mengajar.

Komentar (21)