C++ named requirements: CharTraits
CharTraits ist eine Traits-Klasse, die grundlegende Zeichen- und Zeichenkettenoperationen für einen gegebenen Zeichentyp abstrahiert. Die meisten Standardbibliotheks-String- und Eingabe/Ausgabe-Klassen erfordern einen CharTraits Template-Typparameter zusammen mit einem entsprechenden Zeichen-Template-Typparameter.
Inhaltsverzeichnis |
Anforderungen
Keine der unten aufgeführten Operationen auf CharTraits darf eine Exception 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 Lvalue vom Typ
CharT
Typen
| Typ | Semantik |
|---|---|
X::char_type
|
CharT
|
X::int_type
|
Ein Typ, der alle gültigen Werte von
X::char_type
sowie
X
::
eof
(
)
halten kann
|
X::off_type
|
Ruft implementierungsdefiniertes Verhalten auf, falls nicht
std::streamoff
, wenn
X
als Traits-Template-Parameter in Eingabe-/Ausgabeklassen verwendet wird.
|
X::pos_type
|
|
X::state_type
|
Destructible , CopyAssignable , CopyConstructible , DefaultConstructible |
Ausdrücke
| Ausdruck | Rückgabetyp | Semantik | Komplexität |
|---|---|---|---|
| X :: eq ( c, d ) | bool | Gibt zurück: ob c als gleichwertig zu d zu behandeln ist | Konstante |
| X :: lt ( c, d ) | bool | Gibt zurück: ob c als kleiner als d zu behandeln ist | Konstante |
| X :: compare ( p, q, n ) | int |
Gibt zurück:
|
Linear |
| X :: length ( p ) | std::size_t | Gibt zurück: das kleinste i für das X :: eq ( p [ i ] , CharT ( ) ) gleich true ist | Linear |
| X :: find ( p, n, c ) | const X :: char_type * |
Rückgabewert:
|
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 zu r = d | 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
|
Gibt zurück: einen Wert
e
, beschränkt durch die Definitionen von
X::to_char_type
und
X::eq_int_type
|
Konstante |
| X :: eq_int_type ( e, f ) | bool |
|
Konstante |
| X :: eof ( ) |
X::int_type
|
Gibt zurück: einen Wert e für den X :: eq_int_type ( e, X :: to_int_type ( c ) ) für alle Werte c false ist | Konstante |
Standardbibliothek
CharTraits wird von den folgenden Standardbibliothek-Klassenvorlagen als Template-Typparameter benötigt:
Strings |
|
|
speichert und manipuliert Zeichenfolgen
(Klassentemplate) |
|
|
(C++17)
|
Schreibgeschützte String-Ansicht
(Klassentemplate) |
Streams |
|
|
verwaltet einen beliebigen Streampuffer
(Klassentemplate) |
|
|
umschließt ein gegebenes abstraktes Gerät (
std::basic_streambuf
)
und bietet eine hochwertige Eingabeschnittstelle (Klassentemplate) |
|
|
implementiert High-Level-Dateistrom-Eingabeoperationen
(Klassentemplate) |
|
|
implementiert High-Level String-Stream-Eingabeoperationen
(Klassentemplate) |
|
|
(C++23)
|
implementiert Eingabeoperationen für feste Zeichenpuffer
(Klassentemplate) |
|
umschließt ein gegebenes abstraktes Gerät (
std::basic_streambuf
)
und bietet eine hochwertige Ausgabeschnittstelle (Klassentemplate) |
|
|
implementiert High-Level-Dateistrom-Ausgabeoperationen
(Klassentemplate) |
|
|
implementiert High-Level String-Stream-Ausgabeoperationen
(Klassentemplate) |
|
|
(C++20)
|
Synchronisierte Ausgabestrom-Hülle
(Klassentemplate) |
|
(C++23)
|
implementiert Ausgabeoperationen für feste Zeichenpuffer
(Klassentemplate) |
|
umschließt ein gegebenes abstraktes Gerät (
std::basic_streambuf
)
und bietet eine hochwertige Eingabe/Ausgabe-Schnittstelle (Klassentemplate) |
|
|
implementiert hochwertige Dateistrom-Ein-/Ausgabeoperationen
(Klassentemplate) |
|
|
implementiert High-Level String-Stream-Ein-/Ausgabeoperationen
(Klassentemplate) |
|
|
(C++23)
|
implementiert Eingabe-/Ausgabeoperationen für feste Zeichenpuffer
(Klassentemplate) |
Stream-Iteratoren |
|
|
Eingabe-Iterator, der aus
std::basic_istream
liest
(Klassen-Template) |
|
|
Ausgabeiterator, der in
std::basic_ostream
schreibt
(Klassentemplate) |
|
Streampuffer |
|
|
abstrahiert ein Rohgerät
(Klassentemplate) |
|
|
implementiert Rohdatei-Gerät
(Klassentemplate) |
|
|
implementiert Roh-String-Gerät
(Klassentemplate) |
|
|
(C++20)
|
Synchronisierte Ausgabegeräte-Wrapper
(Klassentemplate) |
|
(C++23)
|
implementiert ein Roh-Fixed-Character-Puffer-Device
(Klassentemplate) |
Stream-Puffer-Iteratoren |
|
|
Eingabe-Iterator, der von
std::basic_streambuf
liest
(Klassentemplate) |
|
|
Ausgabeiterator, der in
std::basic_streambuf
schreibt
(Klassentemplate) |
|
CharTraits
wird durch die folgenden Standardbibliothek-Explizitspezialisierungen von
std::char_traits
erfüllt:
|
template
<>
class
char_traits
<
char
>
;
template
<>
class
char_traits
<
wchar_t
>
;
|
(seit C++20) (seit C++11) (seit C++11) |
|
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 von
assign
verhinderten keine Zuweisungen an Rvalues
|
ihr erstes Argument
kann nur ein Lvalue sein |
| LWG 352 | C++98 |
X::state_type
war nur
erforderlich CopyConstructible zu sein |
es ist auch erforderlich
CopyAssignable und DefaultConstructible zu sein |
| LWG 3085 | C++98 |
X
::
copy
(
s, p, n
)
erforderte nur
p
nicht
in
[
s
,
s
+
n
)
zu sein, was zu schwach ist
[1]
|
erfordert, dass
[
p
,
p
+
n
)
und
[
s
,
s
+
n
)
sich nicht überlappen
|
-
↑
[p,p + n)und[s,s + n)können sich überlappen. Die Verwendung von std::memcpy zur Implementierung vonX::copyführt in diesem Fall zu undefiniertem Verhalten.