Video: CppCon 2019: Herb Sutter “De-fragmenting C++: Making Exceptions and RTTI More Affordable and Usable” 2024
De meest voorkomende vorm van een C ++ array is de nul-eindigende tekenreeks gebruikt om tekst weer te geven, die duidelijk zowel de voordelen en nadelen van de array. Overweeg hoe gemakkelijk het volgende verschijnt:
cout << "dit is een string";
Maar het gaat snel mis wanneer u een bewerking probeert uit te voeren, zelfs zo eenvoudig als het samenvoegen van twee van deze null-terminated strings:
char * concatCharString (const char * s1, const char * s2) {int length = strlen (s1) + strlen (s2) + 1; char * s = nieuw char [length]; strcpy (s, s1); strcat (s, s2); return s;}
De STL biedt een string -container om weer te geven tekenreeksen. De klasse string biedt een aantal bewerkingen (inclusief overbelaste operators) om het manipuleren van tekenreeksen te vereenvoudigen. Dezelfde concat () -bewerking kan als volgt worden uitgevoerd met string -objecten:
string concat (const string & s1, const string & s2) {return s1 + s2;}
In de kern is een string nog steeds een array. De bewerkingen die worden geleverd door de STL maken het gemakkelijker om string -objecten te manipuleren, maar niet zo veel sneller. Als u in het midden van een tekenreeks invoegt, moet u de inhoud van arrays nog steeds verplaatsen.
De string -klasse is in feite een instantiatie van de basissetklasse van de basissjabloon met T ingesteld op char . De wstring-klasse is een andere naam voor basic_class . Deze klasse biedt dezelfde tekenmanipulaties die hier worden getoond voor brede reeksen.
De C ++ '11-definitie voegt u16string en u32string , toe, waarmee de string-manipulatiemethoden worden uitgebreid tot UTF-16- en UTF-32-tekenreeksen. Alle vergelijkingen tussen twee tekenreeksobjecten worden lexicografisch uitgevoerd, dat wil zeggen, welke van de twee reeksen als eerste in het woordenboek van de huidige taal wordt weergegeven.