std:: basic_string
|
Definiert im Header
<string>
|
||
|
template
<
class
CharT,
|
(1) | |
|
namespace
pmr
{
template
<
|
(2) | (seit C++17) |
Die Klassenvorlage
basic_string
speichert und manipuliert Sequenzen von
zeichenähnlichen
Objekten, bei denen es sich um Nicht-Array-Objekte vom Typ
TrivialType
und
StandardLayoutType
handelt. Die Klasse ist weder vom Zeichentyp noch von der Art der Operationen auf diesen Typ abhängig. Die Definitionen der Operationen werden über den
Traits
-Template-Parameter bereitgestellt - eine Spezialisierung von
std::char_traits
oder eine kompatible Eigenschaftenklasse.
Die Elemente eines
basic_string
sind zusammenhängend gespeichert, das heißt, für einen
basic_string
s
gilt
&
*
(
s.
begin
(
)
+
n
)
==
&
*
s.
begin
(
)
+
n
für jedes
n
in
[
0
,
s.
size
(
)
)
, und
*
(
s.
begin
(
)
+
s.
size
(
)
)
hat den Wert
CharT
(
)
(ein Nullterminator)
(seit C++11)
; oder äquivalent dazu kann ein Zeiger auf
s
[
0
]
an Funktionen übergeben werden, die einen Zeiger auf das erste Element eines
Arrays
(bis C++11)
nullterminierten Arrays
(seit C++11)
von
CharT
erwarten.
std::basic_string
erfüllt die Anforderungen von
AllocatorAwareContainer
(außer dass angepasste
construct
/
destroy
nicht für die Konstruktion/Destruktion von Elementen verwendet werden),
SequenceContainer
und
ContiguousContainer
(seit C++17)
.
Falls einer von
Traits::char_type
und
Allocator::value_type
sich von
CharT
unterscheidet, ist das Programm fehlerhaft.
Alle Memberfunktionen von
std::basic_string
sind
constexpr
: Es ist möglich,
std::basic_string
-Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.
Allerdings können
|
(seit C++20) |
Es werden mehrere Typdefinitionen für gängige Zeichentypen bereitgestellt:
|
Definiert im Header
<string>
|
|
| Typ | Definition |
std::string
|
std :: basic_string < char > |
std::wstring
|
std :: basic_string < wchar_t > |
std::u8string
(C++20)
|
std :: basic_string < char8_t > |
std::u16string
(C++11)
|
std :: basic_string < char16_t > |
std::u32string
(C++11)
|
std :: basic_string < char32_t > |
std::pmr::string
(C++17)
|
std :: pmr :: basic_string < char > |
std::pmr::wstring
(C++17)
|
std :: pmr :: basic_string < wchar_t > |
std::pmr::u8string
(C++20)
|
std :: pmr :: basic_string < char8_t > |
std::pmr::u16string
(C++17)
|
std :: pmr :: basic_string < char16_t > |
std::pmr::u32string
(C++17)
|
std :: pmr :: basic_string < char32_t > |
Inhaltsverzeichnis |
Template-Parameter
| CharT | - | Zeichentyp |
| Traits | - | Traits-Klasse, die die Operationen für den Zeichentyp spezifiziert |
| Allocator | - | Allocator Typ, der zur Allokation von internem Speicher verwendet wird |
Verschachtelte Typen
| Typ | Definition | ||||
traits_type
|
Traits
|
||||
value_type
|
CharT
|
||||
allocator_type
|
Allocator
|
||||
size_type
|
|
||||
difference_type
|
|
||||
reference
|
value_type & | ||||
const_reference
|
const value_type & | ||||
pointer
|
|
||||
const_pointer
|
|
||||
iterator
|
|
||||
const_iterator
|
|
||||
reverse_iterator
|
std:: reverse_iterator < iterator > | ||||
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
Datenmitglieder
constexpr
size_type
npos
[static]
|
der spezielle Wert size_type ( - 1 ) , dessen genaue Bedeutung vom Kontext abhängt |
Memberfunktionen
konstruiert einen
basic_string
(öffentliche Elementfunktion) |
|
|
zerstört den String, gibt internen Speicher frei falls verwendet
(public member function) |
|
|
weist der Zeichenkette Werte zu
(öffentliche Elementfunktion) |
|
|
Zeichen einer Zeichenkette zuweisen
(öffentliche Elementfunktion) |
|
|
(C++23)
|
weist einen Bereich von Zeichen einem String zu
(öffentliche Elementfunktion) |
|
gibt den zugeordneten Allokator zurück
(öffentliche Elementfunktion) |
|
Elementzugriff |
|
|
greift auf das angegebene Zeichen mit Grenzüberprüfung zu
(öffentliche Elementfunktion) |
|
|
greift auf das angegebene Zeichen zu
(öffentliche Elementfunktion) |
|
|
(
DR*
)
|
greift auf das erste Zeichen zu
(öffentliche Elementfunktion) |
|
(
DR*
)
|
greift auf das letzte Zeichen zu
(öffentliche Elementfunktion) |
|
gibt einen Zeiger auf das erste Zeichen einer Zeichenkette zurück
(öffentliche Elementfunktion) |
|
|
gibt eine nicht modifizierbare Standard-C-Zeichenarray-Version der Zeichenkette zurück
(öffentliche Elementfunktion) |
|
|
(C++17)
|
gibt eine nicht modifizierbare
basic_string_view
der gesamten Zeichenkette zurück
(öffentliche Elementfunktion) |
Iteratoren |
|
|
(C++11)
|
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion) |
|
(C++11)
|
gibt einen Iterator zum Ende zurück
(öffentliche Elementfunktion) |
|
(C++11)
|
gibt einen Reverse-Iterator zum Anfang zurück
(öffentliche Member-Funktion) |
|
(C++11)
|
gibt einen Reverse-Iterator zum Ende zurück
(öffentliche Member-Funktion) |
Kapazität |
|
|
prüft, ob die Zeichenkette leer ist
(öffentliche Elementfunktion) |
|
|
gibt die Anzahl der Zeichen zurück
(öffentliche Elementfunktion) |
|
|
gibt die maximale Anzahl von Zeichen zurück
(öffentliche Elementfunktion) |
|
|
Speicher reservieren
(öffentliche Elementfunktion) |
|
|
gibt die Anzahl der Zeichen zurück, die im aktuell allozierten Speicherplatz aufgenommen werden können
(öffentliche Elementfunktion) |
|
|
(
DR*
)
|
Reduziert die Speichernutzung durch Freigabe ungenutzten Speichers
(öffentliche Elementfunktion) |
Modifikatoren |
|
|
löscht den Inhalt
(öffentliche Elementfunktion) |
|
|
fügt Zeichen ein
(öffentliche Elementfunktion) |
|
|
(C++23)
|
fügt einen Bereich von Zeichen ein
(öffentliche Elementfunktion) |
|
entfernt Zeichen
(öffentliche Elementfunktion) |
|
|
hängt ein Zeichen am Ende an
(öffentliche Elementfunktion) |
|
|
(
DR*
)
|
entfernt das letzte Zeichen
(öffentliche Elementfunktion) |
|
fügt Zeichen am Ende hinzu
(öffentliche Elementfunktion) |
|
|
(C++23)
|
fügt einen Bereich von Zeichen am Ende an
(öffentliche Elementfunktion) |
|
fügt Zeichen am Ende an
(öffentliche Elementfunktion) |
|
|
ersetzt angegebenen Teil eines Strings
(öffentliche Elementfunktion) |
|
|
(C++23)
|
ersetzt einen bestimmten Teilbereich einer Zeichenkette mit einem Zeichenbereich
(öffentliche Elementfunktion) |
|
kopiert Zeichen
(öffentliche Elementfunktion) |
|
|
ändert die Anzahl der gespeicherten Zeichen
(öffentliche Elementfunktion) |
|
|
(C++23)
|
ändert die Anzahl der gespeicherten Zeichen und überschreibt möglicherweise unbestimmte Inhalte über eine benutzerbereitgestellte Operation
(öffentliche Elementfunktion) |
|
tauscht die Inhalte aus
(öffentliche Elementfunktion) |
|
Suche |
|
|
findet das erste Vorkommen der angegebenen Teilzeichenkette
(öffentliche Elementfunktion) |
|
|
finde das letzte Vorkommen eines Teilstrings
(öffentliche Elementfunktion) |
|
|
finde erstes Vorkommen von Zeichen
(öffentliche Elementfunktion) |
|
|
Findet erste Abwesenheit von Zeichen
(öffentliche Elementfunktion) |
|
|
Suche letztes Vorkommen von Zeichen
(öffentliche Elementfunktion) |
|
|
Letzte Abwesenheit von Zeichen finden
(öffentliche Elementfunktion) |
|
Operationen |
|
|
vergleicht zwei Zeichenketten
(öffentliche Elementfunktion) |
|
|
(C++20)
|
prüft, ob der String mit dem angegebenen Präfix beginnt
(öffentliche Elementfunktion) |
|
(C++20)
|
prüft, ob der String mit dem angegebenen Suffix endet
(öffentliche Elementfunktion) |
|
(C++23)
|
prüft, ob der String die gegebene Teilzeichenkette oder das Zeichen enthält
(öffentliche Elementfunktion) |
|
gibt einen Teilstring zurück
(öffentliche Elementfunktion) |
|
Nicht-Member-Funktionen
|
verkettet zwei Zeichenketten, eine Zeichenkette und ein
char
, oder eine Zeichenkette und
string_view
(Funktionsschablone) |
|
|
(entfernt in C++20)
(entfernt in C++20)
(entfernt in C++20)
(entfernt in C++20)
(entfernt in C++20)
(C++20)
|
vergleicht zwei Zeichenketten lexikographisch
(Funktionsschablone) |
|
spezialisiert den
std::swap
Algorithmus
(Funktionsschablone) |
|
|
löscht alle Elemente, die bestimmte Kriterien erfüllen
(Funktionsschablone) |
|
Eingabe/Ausgabe |
|
|
führt Strom-Ein- und Ausgabe auf Zeichenketten durch
(Funktionsschablone) |
|
|
liest Daten aus einem I/O-Strom in eine Zeichenkette
(Funktionsschablone) |
|
Numerische Konvertierungen |
|
|
(C++11)
(C++11)
(C++11)
|
konvertiert eine Zeichenkette in eine vorzeichenbehaftete Ganzzahl
(Funktion) |
|
(C++11)
(C++11)
|
konvertiert eine Zeichenkette in eine vorzeichenlose Ganzzahl
(Funktion) |
|
(C++11)
(C++11)
(C++11)
|
konvertiert eine Zeichenkette in einen Gleitkommawert
(Funktion) |
|
(C++11)
|
konvertiert einen Ganzzahl- oder Gleitkommawert in
string
(Funktion) |
|
(C++11)
|
konvertiert einen Ganzzahl- oder Gleitkommawert in
wstring
(Funktion) |
Literale
|
Definiert im Inline-Namespace
std::literals::string_literals
|
|
|
(C++14)
|
konvertiert ein Zeichenarray-Literal zu
basic_string
(Funktion) |
Hilfsklassen
|
(C++11)
|
Hash-Unterstützung für Strings
(Klassen-Template-Spezialisierung) |
Deduction guides (seit C++17)
Iterator-Invalidierung
Referenzen, Zeiger und Iteratoren, die auf die Elemente eines
basic_string
verweisen, können durch jede Standardbibliotheksfunktion ungültig werden, die eine Referenz auf einen nicht-konstanten
basic_string
als Argument nimmt, wie z.B.
std::getline
,
std::swap
, oder
operator>>
, sowie durch den Aufruf nicht-konstanter Memberfunktionen, außer
operator[]
,
at
,
data
,
front
,
back
,
begin
,
rbegin
,
end
, und
rend
.
Hinweise
Obwohl es bis C++23 erforderlich war, dass benutzerdefinierte
construct
oder
destroy
verwendet werden, wenn Elemente von
std::basic_string
konstruiert oder zerstört werden, haben alle Implementierungen nur den Standardmechanismus verwendet. Die Anforderung wurde durch
P1072R10
korrigiert, um der bestehenden Praxis zu entsprechen.
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_string_udls
|
201304L
|
(C++14) | Benutzerdefinierte Literale für String-Typen |
__cpp_lib_starts_ends_with
|
201711L
|
(C++20) |
starts_with
,
ends_with
|
__cpp_lib_constexpr_string
|
201907L
|
(C++20) |
Constexpr für
std::basic_string
|
__cpp_lib_char8_t
|
201907L
|
(C++20) |
std::u8string
|
__cpp_lib_erase_if
|
202002L
|
(C++20) |
erase
,
erase_if
|
__cpp_lib_string_contains
|
202011L
|
(C++23) |
contains
|
__cpp_lib_string_resize_and_overwrite
|
202110L
|
(C++23) |
resize_and_overwrite
|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Memberfunktionen für Konstruktion, Einfügung und Ersetzung, die container-kompatible Bereiche akzeptieren |
Beispiel
#include <iostream> #include <string> int main() { using namespace std::literals; // Erstellen eines Strings aus const char* std::string str1 = "hello"; // Erstellen eines Strings mit String-Literal auto str2 = "world"s; // Verketten von Strings std::string str3 = str1 + " " + str2; // Ausgabe des Ergebnisses std::cout << str3 << '\n'; std::string::size_type pos = str3.find(" "); str1 = str3.substr(pos + 1); // Teil nach dem Leerzeichen str2 = str3.substr(0, pos); // Teil bis zum Leerzeichen std::cout << str1 << ' ' << str2 << '\n'; // Zugriff auf ein Element mit dem Indexoperator[] std::cout << str1[0] << '\n'; str1[0] = 'W'; std::cout << str1 << '\n'; }
Ausgabe:
hello world world hello w World
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 530 | C++98 |
Kontiguität des Speichers für Elemente von
basic_string
wurde versehentlich nicht mehr erforderlich gemacht durch LWG259 |
wieder erforderlich gemacht |
| LWG 2861 | C++98 |
value_type
war
Traits::char_type
|
geändert zu
CharT
|
|
LWG 2994
( P1148R0 ) |
C++98 |
das Verhalten ist undefiniert falls einer von
Traits::char_type
[1]
und
Allocator::char_type
sich von
CharT
unterscheidet
|
das Programm ist
in diesem Fall fehlerhaft |
Siehe auch
|
(C++17)
|
schreibgeschützte String-Ansicht
(Klassen-Template) |
Externe Links
| C++-Stringbehandlung |