Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: CharTraits

Von cppreference.com
 
 
C++ benannte Anforderungen
 

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 Typ CharT
  • 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
  • Funktionen in Ein-/Ausgabeklassen, die diesen Typ zurückgeben, verwenden X::pos_type(X::off_type(-1)) als ungültigen Wert, um einen Fehler zu signalisieren
  • Die Verwendung dieses ungültigen Wertes als Argument für ein beliebiges Mitglied von std::istream, std::ostream oder std::streambuf, das einen Wert dieses Typs entgegennimmt, ist undefiniertes Verhalten.
  • Ruft implementierungsdefiniertes Verhalten auf, wenn dieser Typ nicht std::streampos ist, wenn X als Traits-Template-Parameter in Ein-/Ausgabeklassen verwendet wird.
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
  • 0, wenn für jedes i in [0n) gilt: X::eq(p[i], q[i]) ist true.
  • Andernfalls ein negativer Wert, wenn
    • für ein j in [0n) gilt: X::lt(p[j], q[j]) ist true und
    • für jedes i in [0j) gilt: X::eq(p[i], q[i]) ist true.
  • Andernfalls ein positiver Wert.
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
  • Der kleinste Wert q in [pp + n), so dass X::eq(*q, c) true ist.
  • 0 andernfalls.
Linear
X::move(s, p, n) X::char_type*
  • Für jedes i in [0n) wird X::assign(s[i], p[i]) ausgeführt.
  • Kopiert korrekt, auch wenn sich die Bereiche [pp + n) und [ss + n) überschneiden.
  • Rückgabewert: s
Linear
X::copy(s, p, n) X::char_type*
  • Anforderung: Die Bereiche [pp + n) und [ss + n) dürfen sich nicht überschneiden.
  • Rückgabewert: s
  • Für jedes i in [0n) wird X::assign(s[i], p[i]) ausgeführt.
Linear
X::assign(r, d) (Nicht verwendet) Weist r = d zu. Konstante
X::assign(s, n, c) X::char_type*
  • Für jedes i in [0n) wird X::assign(s[i], c) ausgeführt.
  • Rückgabewert: s
Linear
X::not_eof(e) X::int_type Gibt zurück
  • e, wenn X::eq_int_type(e, X::eof()) false ist.
  • Andernfalls ein Wert f, so dass X::eq_int_type(f, X::eof()) false ist.
Konstante
X::to_char_type(e) X::char_type Gibt zurück
  • Wenn für ein c gilt: X::eq_int_type(e, X::to_int_type(c)) ist true, dann c.
  • Andernfalls ein nicht spezifizierter Wert.
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
  • Für alle c und d gilt: X::eq(c, d) ist gleich X::eq_int_type(X::to_int_type(c),
                   X::to_int_type(d))
    .
  • Gibt zurück
    • Gibt X::eq(c, d) zurück, wenn für ein c und d gilt: e == X::to_int_type(c) und f == X::to_int_type(d).
    • Andernfalls gibt es true zurück, wenn e und f beide Kopien von X::eof() sind.
    • Andernfalls gibt es false zurück, wenn einer der Werte e und f eine Kopie von X::eof() ist und der andere nicht.
    • Andernfalls ist der Wert nicht spezifiziert.
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) [edit]
schreibgeschützte String-Ansicht
(class template) [bearbeiten]
Streams
verwaltet einen beliebigen Stream-Puffer
(Klassen-Template) [bearbeiten]
kapselt ein gegebenes abstraktes Gerät (std::basic_streambuf)
und stellt eine High-Level-Eingabeschnittstelle bereit
(class template) [bearbeiten]
implementiert High-Level-Datei-Stream-Eingabeoperationen
(Klassen-Template) [bearbeiten]
implementiert High-Level-String-Stream-Eingabeoperationen
(Klassen-Template) [bearbeiten]
implementiert Eingabeoperationen für Puffer mit festen Zeichen
(Klassen-Template) [bearbeiten]
kapselt ein gegebenes abstraktes Gerät (std::basic_streambuf)
und stellt eine High-Level-Ausgabeschnittstelle bereit
(class template) [bearbeiten]
implementiert High-Level-Datei-Stream-Ausgabeoperationen
(Klassen-Template) [bearbeiten]
implementiert High-Level-String-Stream-Ausgabeoperationen
(Klassen-Template) [bearbeiten]
Wrapper für synchronisierte Ausgabe-Streams
(Klassen-Template) [bearbeiten]
implementiert Ausgabeoperationen für Puffer mit festen Zeichen
(Klassen-Template) [bearbeiten]
kapselt ein gegebenes abstraktes Gerät (std::basic_streambuf)
und stellt eine High-Level-Ein-/Ausgabe-Schnittstelle bereit
(Klassen-Template) [bearbeiten]
implementiert High-Level-Datei-Stream-Ein-/Ausgabeoperationen
(Klassen-Template) [bearbeiten]
implementiert High-Level-String-Stream-Ein-/Ausgabeoperationen
(Klassen-Template) [bearbeiten]
implementiert Ein-/Ausgabeoperationen für Puffer mit festen Zeichen
(Klassen-Template) [bearbeiten]
Stream-Iteratoren
Eingabe-Iterator, der aus std::basic_istream liest
(Klassenvorlage) [bearbeiten]
Ausgabe-Iterator, der in std::basic_ostream schreibt
(Klassenvorlage) [bearbeiten]
Stream-Puffer
abstrahiert ein Rohgerät
(class template) [bearbeiten]
implementiert rohe Datei-Geräte
(Klassen-Template) [bearbeiten]
implementiert rohe String-Geräte
(Klassen-Template) [bearbeiten]
Wrapper für synchronisierte Ausgabegeräte
(Klassen-Template) [bearbeiten]
implementiert rohe Puffergeräte mit festen Zeichen
(Klassen-Template) [bearbeiten]
Stream-Puffer-Iteratoren
Eingabe-Iterator, der aus std::basic_streambuf liest
(Klassenvorlage) [bearbeiten]
Ausgabe-Iterator, der in std::basic_streambuf schreibt
(Klassenvorlage) [bearbeiten]


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>;
template<> class char_traits<char8_t>;
template<> class char_traits<char16_t>;

template<> class char_traits<char32_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 von
assign erlaubten keine Zuweisungen an R-Werte.
Ihr erstes Argument
kann nur ein L-Wert sein.
LWG 352 C++98 X::state_type war nur
als 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 [ss + n), was zu schwach war[1].
fordert, dass [pp + n) und
[ss + n) sich nicht überschneiden.
  1. Wenn sich [pp + n) und [ss + n) überschneiden, führt die Verwendung von std::memcpy zur Implementierung von X::copy in diesem Fall zu undefiniertem Verhalten.