C++ benannte Anforderungen: CharTraits
CharTraits ist eine Traits-Klasse, die grundlegende Zeichen- und String-Operationen für einen bestimmten Zeichentyp abstrahiert. Die meisten Standardbibliotheks-String- und Ein-/Ausgabeklassen erfordern neben einem entsprechenden Zeichentyp-Template-Parameter auch einen CharTraits-Template-Typ-Parameter.
Inhalt |
[bearbeiten] Anforderungen
Keine der unten aufgeführten Operationen auf CharTraits darf eine Ausnahme auslösen.
Gegeben
-
CharT, ein Zeichentyp -
X, ein CharTraits-Typ für den TypCharT - c, d, Werte vom Typ
CharT - p, q, Werte vom Typ const CharT*
- s, ein Wert vom Typ
CharT* - n, i, j, Werte vom Typ std::size_t
- e, f, Werte vom Typ
X::int_type - pos, ein Wert vom Typ
X::pos_type - state, ein Wert vom Typ
X::state_type - r, ein L-Wert vom Typ
CharT
[bearbeiten] Typen
| Typ | Semantik |
|---|---|
X::char_type |
CharT
|
X::int_type |
Ein Typ, der alle gültigen Werte von X::char_type plus X::eof() aufnehmen kann |
X::off_type |
Ruft implementierungsdefiniertes Verhalten auf, wenn es sich nicht um std::streamoff handelt, wenn X als Traits-Template-Parameter in Ein-/Ausgabeklassen verwendet wird. |
X::pos_type |
|
X::state_type |
Destructible, CopyAssignable, CopyConstructible, DefaultConstructible |
[bearbeiten] Ausdrücke
| Ausdruck | Rückgabetyp | Semantik | Komplexität |
|---|---|---|---|
| X::eq(c, d) | bool | Rückgabewert: Gibt an, ob c als gleich d behandelt werden soll. | Konstante |
| X::lt(c, d) | bool | Rückgabewert: Gibt an, ob c als kleiner als d behandelt werden soll. | Konstante |
| X::compare(p, q, n) | int | Gibt zurück
|
Linear |
| X::length(p) | std::size_t | Rückgabewert: Gibt den kleinsten Wert i zurück, so dass X::eq(p[i], CharT()) true ist. | Linear |
| X::find(p, n, c) | const X::char_type* | Gibt zurück
|
Linear |
| X::move(s, p, n) | X::char_type* |
|
Linear |
| X::copy(s, p, n) | X::char_type* |
|
Linear |
| X::assign(r, d) | (Nicht verwendet) | Weist r = d zu. | Konstante |
| X::assign(s, n, c) | X::char_type* |
|
Linear |
| X::not_eof(e) | X::int_type |
Gibt zurück
|
Konstante |
| X::to_char_type(e) | X::char_type |
Gibt zurück
|
Konstante |
| X::to_int_type(c) | X::int_type |
Rückgabewert: Gibt einen Wert e zurück, der durch die Definitionen von X::to_char_type und X::eq_int_type eingeschränkt ist. |
Konstante |
| X::eq_int_type(e, f) | bool |
|
Konstante |
| X::eof() | X::int_type |
Rückgabewert: Gibt einen Wert e zurück, für den X::eq_int_type(e, X::to_int_type(c)) für alle Werte c false ist. | Konstante |
[bearbeiten] Standardbibliothek
CharTraits wird von den folgenden Standardbibliotheks-Klassentemplates als Template-Typ-Parameter benötigt.
Strings | |
| speichert und manipuliert Zeichenfolgen (Klassenvorlage) | |
| (C++17) |
schreibgeschützte String-Ansicht (class template) |
Streams | |
| verwaltet einen beliebigen Stream-Puffer (Klassen-Template) | |
| kapselt ein gegebenes abstraktes Gerät (std::basic_streambuf) und stellt eine High-Level-Eingabeschnittstelle bereit (class template) | |
| implementiert High-Level-Datei-Stream-Eingabeoperationen (Klassen-Template) | |
| implementiert High-Level-String-Stream-Eingabeoperationen (Klassen-Template) | |
| (C++23) |
implementiert Eingabeoperationen für Puffer mit festen Zeichen (Klassen-Template) |
| kapselt ein gegebenes abstraktes Gerät (std::basic_streambuf) und stellt eine High-Level-Ausgabeschnittstelle bereit (class template) | |
| implementiert High-Level-Datei-Stream-Ausgabeoperationen (Klassen-Template) | |
| implementiert High-Level-String-Stream-Ausgabeoperationen (Klassen-Template) | |
| (C++20) |
Wrapper für synchronisierte Ausgabe-Streams (Klassen-Template) |
| (C++23) |
implementiert Ausgabeoperationen für Puffer mit festen Zeichen (Klassen-Template) |
| kapselt ein gegebenes abstraktes Gerät (std::basic_streambuf) und stellt eine High-Level-Ein-/Ausgabe-Schnittstelle bereit (Klassen-Template) | |
| implementiert High-Level-Datei-Stream-Ein-/Ausgabeoperationen (Klassen-Template) | |
| implementiert High-Level-String-Stream-Ein-/Ausgabeoperationen (Klassen-Template) | |
| (C++23) |
implementiert Ein-/Ausgabeoperationen für Puffer mit festen Zeichen (Klassen-Template) |
Stream-Iteratoren | |
| Eingabe-Iterator, der aus std::basic_istream liest (Klassenvorlage) | |
| Ausgabe-Iterator, der in std::basic_ostream schreibt (Klassenvorlage) | |
Stream-Puffer | |
| abstrahiert ein Rohgerät (class template) | |
| implementiert rohe Datei-Geräte (Klassen-Template) | |
| implementiert rohe String-Geräte (Klassen-Template) | |
| (C++20) |
Wrapper für synchronisierte Ausgabegeräte (Klassen-Template) |
| (C++23) |
implementiert rohe Puffergeräte mit festen Zeichen (Klassen-Template) |
Stream-Puffer-Iteratoren | |
| Eingabe-Iterator, der aus std::basic_streambuf liest (Klassenvorlage) | |
| Ausgabe-Iterator, der in std::basic_streambuf schreibt (Klassenvorlage) | |
CharTraits wird von den folgenden expliziten Spezialisierungen von std::char_traits in der Standardbibliothek erfüllt:
| template<> class char_traits<char>; template<> class char_traits<wchar_t>; |
(seit C++20) (seit C++11) (seit C++11) |
|
[bearbeiten] 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 335 | C++98 | Die Anforderungen an die binäre Überladung vonassign erlaubten keine Zuweisungen an R-Werte. |
Ihr erstes Argument kann nur ein L-Wert sein. |
| LWG 352 | C++98 | X::state_type war nurals CopyConstructible erforderlich. |
es muss auch als CopyAssignable und DefaultConstructible erforderlich sein. |
| LWG 3085 | C++98 | X::copy(s, p, n) forderte nur p nicht in [s, s + n), was zu schwach war[1]. |
fordert, dass [p, p + n) und[s, s + n) sich nicht überschneiden. |
- ↑ Wenn sich
[p,p + n)und[s,s + n)überschneiden, führt die Verwendung von std::memcpy zur Implementierung vonX::copyin diesem Fall zu undefiniertem Verhalten.