Her türlü "dize başvurusu" ve "dizi başvurusu" tekliflerinin amacı, başka bir yere ait olan ve yalnızca mutasyona uğramayan bir görünüme ihtiyaç duyulan verileri kopyalamaktan kaçınmaktır. Söz string_view
konusu olan, böyle bir tekliftir; daha önce denilenler vardı string_ref
vearray_ref
vardı.
Fikir her zaman bir çift işaretçi-ilk eleman ve mevcut bazı boyutlarını saklamaktır veri dizisi veya dizesinin .
Böyle bir görünüm tanıtıcı sınıfı değere göre ucuza aktarılabilir ve ucuz alt dize işlemleri sunar (basit işaretçi artışları ve boyut ayarlamaları olarak uygulanabilir).
Dizelerin birçok kullanımı dizelerin gerçekte sahiplenmesini gerektirmez ve söz konusu dizenin çoğu zaman başka birisine ait olacaktır. Dolayısıyla, gereksiz kopyalardan kaçınarak verimliliği artırmak için gerçek bir potansiyel vardır (kaydedebileceğiniz tüm tahsisleri ve istisnaları düşünün).
Orijinal C dizeleri, boş sonlandırıcının dize API'lerinin bir parçası olduğu sorunundan muzdaripti ve bu nedenle temel dizeyi (a la strtok
) değiştirmeden kolayca alt dizeler oluşturamazsınız . C ++ 'da bu, uzunluğu ayrı ayrı saklayarak ve işaretçiyi ve boyutu bir sınıfa sararak kolayca çözülebilir.
Düşünebileceğim C ++ standart kütüphane felsefesinin önündeki en büyük engel ve sapma, bu tür "referans görünüm" sınıflarının, standart kütüphanenin geri kalanından tamamen farklı sahiplik semantiğine sahip olmasıdır. Temel olarak, standart kütüphanedeki diğer her şey koşulsuz olarak güvenli ve doğrudur (eğer derlerse, doğrudur). Bunun gibi referans sınıflarıyla, artık doğru değil. Programınızın doğruluğu, bu sınıfları kullanan ortam koduna bağlıdır. Bu yüzden kontrol etmek ve öğretmek daha zor.