C++ named requirements: CharTraits
CharTraits est une classe de traits qui abstrait les opérations de base sur les caractères et les chaînes pour un type de caractère donné. La plupart des classes de chaînes et d'entrée/sortie de la bibliothèque standard requièrent un paramètre de type template CharTraits parallèlement à un paramètre de type template de caractère correspondant.
Table des matières |
Exigences
Aucune opération listée ci-dessous sur CharTraits ne peut lever une exception.
Étant donné
-
CharT, un type de caractère -
X, un type CharTraits pour le typeCharT -
c
,
d
, valeurs de type
CharT - p , q , valeurs de type const CharT *
-
s
, une valeur de type
CharT* - n , i , j , valeurs de type std::size_t
-
e
,
f
, valeurs de type
X::int_type -
pos
, une valeur de type
X::pos_type -
state
, une valeur de type
X::state_type -
r
, une lvalue de type
CharT
Types
| Type | Sémantique |
|---|---|
X::char_type
|
CharT
|
X::int_type
|
Un type capable de contenir toutes les valeurs valides de
X::char_type
ainsi que
X
::
eof
(
)
|
X::off_type
|
Comportement défini par l'implémentation si ce n'est pas
std::streamoff
lorsque
X
est utilisé comme paramètre de template traits dans les classes d'entrée/sortie.
|
X::pos_type
|
|
X::state_type
|
Destructible , CopyAssignable , CopyConstructible , DefaultConstructible |
Expressions
| Expression | Type de retour | Sémantique | Complexité |
|---|---|---|---|
| X :: eq ( c, d ) | bool | Retourne : si c doit être considéré comme égal à d | Constant |
| X :: lt ( c, d ) | bool | Retourne : si c doit être considéré comme inférieur à d | Constant |
| X :: compare ( p, q, n ) | int |
Retourne :
|
Linéaire |
| X :: length ( p ) | std::size_t | Retourne : le plus petit i tel que X :: eq ( p [ i ] , CharT ( ) ) soit true | Linéaire |
| X :: find ( p, n, c ) | const X :: char_type * |
Retourne :
|
Linéaire |
| X :: move ( s, p, n ) |
X::char_type*
|
|
Linéaire |
| X :: copy ( s, p, n ) |
X::char_type*
|
|
Linéaire |
| X :: assign ( r, d ) | (Non utilisé) | Assigne r = d | Constante |
| X :: assign ( s, n, c ) |
X::char_type*
|
|
Linéaire |
| X :: not_eof ( e ) |
X::int_type
|
Retourne :
|
Constante |
| X :: to_char_type ( e ) |
X::char_type
|
Retourne :
|
Constante |
| X :: to_int_type ( c ) |
X::int_type
|
Retourne : une certaine valeur
e
, contrainte par les définitions de
X::to_char_type
et
X::eq_int_type
|
Constante |
| X :: eq_int_type ( e, f ) | bool |
|
Constante |
| X :: eof ( ) |
X::int_type
|
Retourne : une valeur e telle que X :: eq_int_type ( e, X :: to_int_type ( c ) ) est false pour toutes les valeurs c | Constante |
Bibliothèque standard
CharTraits est requis par les modèles de classes de la bibliothèque standard suivants en tant que paramètre de type template :
Chaînes de caractères |
|
|
stocke et manipule des séquences de caractères
(modèle de classe) |
|
|
(C++17)
|
vue de chaîne en lecture seule
(modèle de classe) |
Flux |
|
|
gère un tampon de flux arbitraire
(modèle de classe) |
|
|
encapsule un dispositif abstrait donné (
std::basic_streambuf
)
et fournit une interface d'entrée de haut niveau (modèle de classe) |
|
|
implémente les opérations d'entrée de flux de fichier de haut niveau
(modèle de classe) |
|
|
implémente les opérations d'entrée de flux de chaîne de haut niveau
(modèle de classe) |
|
|
(C++23)
|
implémente les opérations d'entrée sur tampon de caractères fixe
(modèle de classe) |
|
encapsule un dispositif abstrait donné (
std::basic_streambuf
)
et fournit une interface de sortie de haut niveau (modèle de classe) |
|
|
implémente les opérations de sortie de flux de fichiers de haut niveau
(modèle de classe) |
|
|
implémente les opérations de sortie de flux de chaîne de haut niveau
(modèle de classe) |
|
|
(C++20)
|
wrapper de flux de sortie synchronisé
(modèle de classe) |
|
(C++23)
|
implémente les opérations de sortie sur tampon de caractères fixe
(modèle de classe) |
|
encapsule un dispositif abstrait donné (
std::basic_streambuf
)
et fournit une interface d'entrée/sortie de haut niveau (modèle de classe) |
|
|
implémente les opérations d'entrée/sortie de flux de fichiers de haut niveau
(modèle de classe) |
|
|
implémente les opérations d'entrée/sortie de flux de chaînes de haut niveau
(modèle de classe) |
|
|
(C++23)
|
implémente les opérations d'entrée/sortie sur tampon de caractères fixe
(modèle de classe) |
Itérateurs de flux |
|
|
itérateur d'entrée qui lit depuis
std::basic_istream
(modèle de classe) |
|
|
itérateur de sortie qui écrit dans
std::basic_ostream
(modèle de classe) |
|
Tampons de flux |
|
|
abstrait un périphérique brut
(modèle de classe) |
|
|
implémente le périphérique de fichier brut
(modèle de classe) |
|
|
implémente un périphérique de chaîne brut
(modèle de classe) |
|
|
(C++20)
|
enveloppe de périphérique de sortie synchronisé
(modèle de classe) |
|
(C++23)
|
implémente un périphérique de tampon de caractères brut fixe
(modèle de classe) |
Itérateurs de tampon de flux |
|
|
itérateur d'entrée qui lit depuis
std::basic_streambuf
(modèle de classe) |
|
|
itérateur de sortie qui écrit vers
std::basic_streambuf
(modèle de classe) |
|
CharTraits
est satisfait par les spécialisations explicites suivantes de la bibliothèque standard de
std::char_traits
:
|
template
<>
class
char_traits
<
char
>
;
template
<>
class
char_traits
<
wchar_t
>
;
|
(depuis C++20) (depuis C++11) (depuis C++11) |
|
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 335 | C++98 |
les exigences sur la surcharge binaire de
assign
n'empêchaient pas les assignations vers des rvalues
|
son premier argument
ne peut être qu'un lvalue |
| LWG 352 | C++98 |
X::state_type
était seulement
requis d'être CopyConstructible |
il est également requis d'être
CopyAssignable et DefaultConstructible |
| LWG 3085 | C++98 |
X
::
copy
(
s, p, n
)
exigeait seulement que
p
ne soit
pas dans
[
s
,
s
+
n
)
, ce qui est trop faible
[1]
|
exige que
[
p
,
p
+
n
)
et
[
s
,
s
+
n
)
ne se chevauchent pas
|
-
↑
[p,p + n)et[s,s + n)peuvent se chevaucher, l'utilisation de std::memcpy pour implémenterX::copyentraîne un comportement indéfini dans ce cas.