Hvorfor string_view
Undgå kopiering af strenge
Hvorfor string_view er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.
Kopieringsomkostningen
At sende std::string som værdi kopierer hele bufferen. Ved skrivebeskyttet adgang er den kopiering spildt arbejde. std::string_view er en let, ikke-ejende visning – blot en pointer og en længde. Inkludér <string_view>.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "hello";
std::cout << sv << " len=" << sv.size() << "\n";
}Hvad en visning indeholder
En string_view gemmer kun en pointer til eksisterende tegn og en længde. Den ejer eller kopierer ikke dataene.
#include <iostream>
#include <string>
#include <string_view>
int main() {
std::string s = "world";
std::string_view sv = s; // views s, no copy
std::cout << sv << "\n";
}Skrivebeskyttede parametre
Når du accepterer std::string_view, fungerer din funktion med std::string, strengliteraler og char-arrays uden at kopiere nogen af dem.
#include <iostream>
#include <string_view>
void greet(std::string_view name) {
std::cout << "Hi, " << name << "\n";
}
int main() {
greet("Ada");
greet(std::string("Bob"));
}Ingen allokering
Oprettelse af en visning allokerer aldrig hukommelse, så den er billig at kopiere og sende rundt som værdi.
#include <iostream>
#include <string_view>
int main() {
std::string_view a = "constant text";
std::string_view b = a; // trivial copy
std::cout << (a == b) << "\n";
}Billige delstrenge
substr på en visning returnerer en anden visning i den samme hukommelse, så ingen tegn kopieres.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "abcdef";
std::cout << sv.substr(2, 3) << "\n"; // cde
}Sammenligning med fokus på ydeevne
For funktioner, der kun undersøger tekst, undgår string_view både heap-allokering og kopiering, hvilket er vigtigt i hyppigt kørte løkker og ved parsing.
Længde og indeksering
En visning understøtter den velkendte grænseflade: size(), empty(), indeksering og intervalbaseret iteration.
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "C++";
for (char c : sv) std::cout << c << "-";
std::cout << "\n" << sv.size() << "\n";
}Visninger er skrivebeskyttede
Du kan ikke ændre tegn gennem en string_view; den giver kun læseadgang. Hvis du vil ændre teksten, skal du bruge den ejende streng.
Fra literal til visning
Strengliteraler konverteres direkte til visninger, hvilket gør det ekstremt billigt at sende konstant tekst.
#include <iostream>
#include <string_view>
using namespace std::string_view_literals;
int main() {
auto sv = "literal"sv;
std::cout << sv.size() << "\n";
}Ikke en erstatning for string
Brug std::string, når du skal eje, gemme eller ændre tekst. Brug std::string_view til midlertidige, skrivebeskyttede parametre.
Bemærkning om levetid
Fordi en visning ikke ejer sine data, skal de underliggende tegn leve længere end visningen. Misbrug af dette fører til ugyldige visninger, som gennemgås i en senere lektion.
Hurtigt tjek
Tjek din forståelse af, hvorfor string_view bruges.
Opsummering
Du har lært hvorfor string_view findes:
- Det er en ikke-ejende visning bestående af en pointer og en længde.
- Ved at acceptere den undgår du kopiering og allokering ved skrivebeskyttet tekst.
- Den fungerer med strenge, literaler og char-arrays.
- De viste data skal leve længere end visningen.
Lær C++ med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Hvorfor string_view” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Hvorfor string_view”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Hvorfor string_view”?
Undgå kopiering af strenge Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C++ Academy?
Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Hvorfor string_view”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C++ Academy-lektion?
Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Hvorfor string_view
- Oprettelse af views
- Faldgruber og levetider
- String-algoritmer