Ce este string_view?

string_view s-a propus o funcție în C++ Bibliotecă Fundamentele TS(N3921) adăugat la C++17

După câte am înțeles, este un tip care reprezintă un fel de string "concept", care este o vizualizare de orice tip de container, care ar putea stoca ceva vizibile ca un șir de caractere.

  • E în regulă ?
  • Ar trebui să canonice const std::string& parametru de tip deveni string_view ?
  • Există un alt punct important despre string_view să ia în considerare ?
Comentarii la întrebare (1)
Soluția

În scopul de orice și toate tipurile de "string referință" și "matrice de referință" propuneri este de a evita copierea datelor care este deja deținut în altă parte și de care numai un non-mutant punct de vedere este necesar. Anii string_view în întrebare este o astfel de propunere; nu au fost cele anterioare numitstring_ref " și " array_ref, de asemenea.

Ideea este întotdeauna la magazin o pereche de pointer la primul element și dimensiunea unor existent matrice de date sau șir de caractere.

Un asemenea punct de vedere-se ocupe de clasă ar putea fi trecut în jurul valorii de ieftin prin valoare și ar oferi ieftine substringing operațiuni (care pot fi puse în aplicare cât mai simplu indicator trepte și dimensiunea ajustări).

Multe utilizări de siruri de caractere don't nevoie reală de a deține siruri de caractere, și șirul în cauză de multe ori va fi deja deținută de altcineva. Deci nu este un veritabil potențial pentru creșterea eficienței prin evitarea inutile copii (cred că de toate alocările și excepții puteți salva).

Original C siruri de caractere au fost suferă de problema asta terminator null fost parte din șir APIs, și ca să n-o't de ușor de a crea siruri de caractere fără mutații de fond al sistemului string (à la strtok). În C++, acest lucru este ușor de rezolvat prin stocarea lungimea separat și ambalaj pointer și dimensiuni într-o singură clasă.

Un obstacol major și divergență din biblioteca standard C++ filozofie care mă pot gândi este că astfel de "referențială vedere" clase complet diferite proprietate semantica de restul biblioteca standard. Practic, orice altceva în biblioteca standard este necondiționat în condiții de siguranță și corectă (dacă se compilează, l's corecte). Cu referire clase, cum ar fi acest lucru, care's nu mai e adevărat. Corectitudinea programului depinde de ambient cod care folosește aceste clase. Așa că's mai greu de a verifica și de a învăța.

Comentarii (21)