Sadece biraz yanlış anlama koştu rvalue ifadesini bu kurucuya iletirsek, yapım sonrası __data kullanırken tanımsız bir davranış olur mu?string_view davranış :: dize
cevap
Doğru. Bir string_view
, yalnızca başvurulan dize görünümün kullanımını geçtiğinde kullanılması gereken referans semantiklerine sahip bir sahip olmayan sargıdır. Gerçek dize işlev çağrısı süresi ve görünümünü saklar asla fonksiyon vücut için yaşadığı
tipik bir kullanım durumu
fonksiyon parametrelerinde, ama sadece okur o:void foo(std::experimental::string_view message) // pass by value
{
std::cout << "You said, '" << message << "'.\n";
}
Kullanımı:
foo("Hello"); // OK, string literal has static storage
foo(s); // OK, s is alive
foo(s.substr(1)); // OK, temporary lives until end of full-expression
ahlaki şudur: yalnızca işlev gövdesinin süresince dize gerekiyorsa, işlevini bir string_view
parametreyi vermek ve tekdüze stringoid argume her türlü bağlanabildiği nt. Bir işlev şablonuna ihtiyacınız yoktur, string_view
s kopyalamak ucuzdur ve ücretsiz olarak düzgün bir alt bölümleme işlemi gerçekleştirirsiniz. Buna karşılık, bir string_view
depolamak, ama her zaman saklamak asla string
:
struct X
{
X(std::experimental::string_view s) : s_(s) {}
std::string s_; // NEVER have a string_view class member!
};
"Asla" biraz sert ama eğer saklarsanız o zaman bir "char *" – plugwash
@plugwash: Belki de saklarsan dikkat etmelisin. Ama manzarayı saklarsan kesinlikle mesaj dışı kalacağını söyleyebilirim. Evet, sadece bir prvalue olarak kullanılan geçici bir sınıfta * bunu kullanabileceksiniz, ancak bu kod muhtemelen görüntülenen dizginin callable'ı geride bıraktığını açıkça gösteren lambdalarla yazılmış daha iyidir. –
- 1. Harita araması için string_view öğesinin kullanımı
- 2. std :: string_view geçici ipte yakalamak Asan
- 3. Davranış
- 4. Davranış
- 5. Davranış
- 6. Java dizeleriyle garip davranış
- 7. php garip davranış dizisine erişim garip davranış
- 8. dispatch_get_global_queue davranış
- 9. Yineleyici davranış
- 10. ScriptBlock.GetNewClosure() Davranış
- 11. (++ i) ++ tanımsız davranış mı?
- 12. İlginç Konu davranış Java
- 13. Postgresql'deki garip davranış
- 14. System.Diagnostics.Process.Start() tuhaf davranış
- 15. String.replaceAll Garip Davranış
- 16. Garip Clang davranış
- 17. gizemli git davranış
- 18. EditText'deki garip davranış
- 19. Change ProgressBar.Horizontal belirsiz Davranış
- 20. Davranış kodu Yii2
- 21. Hacking RJS davranış 5
- 22. Array.prototype.find() beklenmedik davranış
- 23. Python zip() davranış?
- 24. C# Decimal.Parse davranış
- 25. Boru operatör davranış
- 26. Koşul operatörü, garip davranış
- 27. Python list.index davranış?
- 28. boost :: regexp'in beklenmedik davranış
- 29. Python döngü davranış sorunu
- 30. Davranış: uzunluk: freeWhenDone:
Evet. Bir 'string_view' sadece yüceltilmiş bir referanstır. – Rapptz
[Ayrıca bkz.] (Http://stackoverflow.com/q/20803826/596781). –