Requisitos denominados de C++: CharTraits
CharTraits es una clase de rasgos que abstrae las operaciones básicas de caracteres y cadenas de texto para un tipo carácter dado. La mayoría de las clases de cadena y entrada/salida de la biblioteca estándar requieren un parámetro de tipo plantilla CharTraits junto con un parámetro de tipo plantilla un tipo de carácter correspondiente.
Requisitos
Ninguna operación CharTraits de las que se enumeran a continuación debe lanzar una excepción.
Dado
CharT, un tipo carácter,X, un tipo CharTraits para el tipoCharT,c,d, valores de tipoCharT,- {
p,q, valores de tipoconst CharT*, s, un valor de tipoCharT*,n,i,j, valores de tipostd::size_t,e,f, valores de tipoX::int_type,pos, un valor de tipoX::pos_type,state, un valor de tipoX::state_type,r, un lvalue de tipoCharT.
Tipos
| Tipo | Semánticas |
|---|---|
X::char_type |
CharT
|
X::int_type |
Un tipo que puede contener todos los valores válidos de X::char_type más X::eof().
|
X::off_type |
Invoca el comportamiento definido por la implementación si no se usa std::streamoff cuando X se usa como parámetro de plantilla de rasgos en clases de entrada/salida.
|
X::pos_type |
|
X::state_type |
Destructible, CopyAssignable, CopyConstructible, DefaultConstructible. |
Expresiones
| Expresión | Valor de retorno | Semántica | Complejidad |
|---|---|---|---|
X::eq(c,d) |
bool |
Devuelve: si c debe ser tratado como igual a d. |
Constante. |
X::lt(c,d) |
bool |
Devuelve: si c debe ser tratado como menor que d. |
Constante. |
X::compare(p,q,n) |
int |
Devuelve:
|
Lineal. |
X::length(p) |
std::size_t |
Devuelve: la i más pequeña tal que X::eq(p[i], CharT()) es verdadero. |
Lineal. |
X::find(p,n,c) |
const X::char_type* |
Devuelve:
|
Lineal |
X::move(s,p,n) |
X::char_type* |
|
Lineal. |
X::copy(s,p,n) |
X::char_type* |
|
Lineal. |
X::assign(r,d) |
(No utilizado). | Asigna r = d. |
Constante. |
X::assign(s,n,c) |
X::char_type* |
|
Lineal. |
X::not_eof(e) |
X::int_type |
Devuelve:
|
Constante. |
X::to_char_type(e) |
X::char_type |
Devuelve:
|
Constante. |
X::to_int_type(c) |
X::int_type |
Devuelve: algún valor e, restringido por las definiciones de X::to_char_type y X::eq_int_type. |
Constante. |
X::eq_int_type(e,f) |
bool |
|
Constante. |
X::eof() |
X::int_type |
Devuelve: un valor e tal que X::eq_int_type(e, X::to_int_type(c)) es falso para todos los valores c. |
Constante. |
Biblioteca estándar
CharTraits es requerido por las siguientes plantillas de clase de la biblioteca estándar como parámetro de tipo de plantilla:
Cadenas de texto | |
| Almacena y manipula secuencias de caracteres. (plantilla de clase) | |
(C++17) |
Vista sobre cadena de solo lectura. (plantilla de clase) |
Flujos | |
| Administra un búfer de flujo arbitrario. (plantilla de clase) | |
| Envuelve un dispositivo abstracto dado (std::basic_streambuf) y proporciona una interfaz de entrada de alto nivel. (plantilla de clase) | |
| Implementa operaciones de entrada de flujo de archivo de alto nivel. (plantilla de clase) | |
| Implementa operaciones de entrada de flujo de cadena de alto nivel. (plantilla de clase) | |
| Envuelve un dispositivo abstracto dado (std::basic_streambuf) y proporciona una interfaz de salida de alto nivel. (plantilla de clase) | |
| Implementa operaciones de salida de flujo de archivo de alto nivel. (plantilla de clase) | |
| Implementa operaciones de salida de flujo de cadena de alto nivel. (plantilla de clase) | |
(C++20) |
Envoltorio de flujo de salida sincronizado. (plantilla de clase) |
| Envuelve un dispositivo abstracto dado (std::basic_streambuf) y proporciona una interfaz de entrada/salida de alto nivel. (plantilla de clase) | |
| Implementa operaciones de entrada/salida de flujo de archivo de alto nivel. (plantilla de clase) | |
| Implementa operaciones de entrada/salida de flujo de cadena de alto nivel. (plantilla de clase) | |
(C++23) |
Implementa operaciones de entrada/salida de búfer de caracteres fijas. (plantilla de clase) |
Iteradores de flujo | |
| Iterador de entrada que lee de un flujo de entrada (std::basic_istream). (plantilla de clase) | |
| Iterador de salida que escribe a un flujo de salida (std::basic_ostream). (plantilla de clase) | |
bufer de flujo | |
| Abstrae un dispositivo puro. (plantilla de clase) | |
| Implementa un dispositivo de archivo puro. (plantilla de clase) | |
| Implementa un dispositivo de cadena puro. (plantilla de clase) | |
(C++20) |
Envoltorio de un dispositivo de salida sincronizado. (plantilla de clase) |
Iteradores de bufer de flujo | |
| Iterador de entrada que lee de un búfer de flujo (std::basic_streambuf). (plantilla de clase) | |
| Iterador de salida que escribe a un búfer de flujo (std::basic_streambuf). (plantilla de clase) | |
CharTraits se satisface a través de las siguientes especializaciones explícitas de std::char_traits en la biblioteca estándar:
template<> class char_traits<char>; |
||
template<> class char_traits<wchar_t>; |
||
template<> class char_traits<char8_t>; |
(desde C++20) | |
template<> class char_traits<char16_t>; |
(desde C++11) | |
template<> class char_traits<char32_t>; |
(desde C++11) | |
Informe de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 335 | C++98 | Los requisitos de la sobrecarga binaria deassign no impedían las asignaciones a rvalores
|
su primer argumento solo puede ser un lvalor |
| LWG 352 | C++98 | X::state_type solo requeríaser CopyConstructible |
también se requiere que sea CopyAssignable y DefaultConstructible |
| LWG 3085 | C++98 | X::copy(s, p, n) solo requería que p no estéen [s, s + n), lo cual es demasiado débil[1]
|
requiere que [p, p + n) y[s, s + n) no se superongan
|
- ↑
[p,p + n)and[s,s + n)pueden superponerse, usar std::memcpy para implementarX::copyresulta en un comportamiento indefinido en este caso.