| Definido en el archivo de encabezado <string_view>
|
||
template<
class CharT,
class Traits = std::char_traits<CharT>
> class basic_string_view;
|
(desde C++17) | |
La plantilla de clase basic_string_view describe un objeto que puede hacer referencia a una secuencia contigua constante de CharT, con el primer elemento de la secuencia en la posición cero.
Para un objeto de tipo basic_string_view str, los punteros, iteradores y referencias a elementos de str quedan invalidados cuando una operación invalida un puntero en el rango [str.data(), str.data() + str.size()).
|
Cada especialización de |
(desde C++23) |
Se proporcionan varias definiciones de tipo para tipos carácter comunes:
Definido en el encabezado
<string_view> | |
| Tipo | Definición |
| std::string_view (C++17) | std::basic_string_view<char>
|
| std::wstring_view (C++17) | std::basic_string_view<wchar_t>
|
| std::u8string_view (C++20) | std::basic_string_view<char8_t>
|
| std::u16string_view (C++17) | std::basic_string_view<char16_t>
|
| std::u32string_view (C++17) | std::basic_string_view<char32_t>
|
Parámetros de plantilla
| CharT | - | Tipo carácter |
| Traits | - | CharTraits La clase que especifica las operaciones sobre el tipo carácter. Al igual que basic_string, Traits::char_type tiene que nombrar al mismo tipo que CharT o de lo contrario el programa es malformado.
|
Tipos anidados
| Tipo | Definición | ||||
traits_type
|
Traits
| ||||
value_type
|
CharT
| ||||
pointer
|
CharT*
| ||||
const_pointer
|
const CharT*
| ||||
reference
|
CharT&
| ||||
const_reference
|
const CharT&
| ||||
const_iterator
|
Constante definida por la implementación que cumple con IteradorDeAccesoAleatorioLegado,
cuyo | ||||
iterator
|
const_iterator
| ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator>
| ||||
reverse_iterator
|
const_reverse_iterator
| ||||
size_type
|
std::size_t | ||||
difference_type
|
std::ptrdiff_t |
Nota: iterator y const_iterator son del mismo tipo porque las vistas sobre cadena son vistas sobre una secuencia de caracteres.
Todos los requisitos para los tipos iterador de un Contenedor también se aplican los tipos iterator y const_iterator de la vista sobre cadena.
Datos miembro
| Miembro | Descripción |
data_
|
Un puntero a la secuencia subyacente. (objeto miembro solo de exposición*) |
size_
|
El número de caracteres. (objeto miembro solo de exposición*) |
Funciones miembro
Constructores y asignación | |
Construye una vista sobre cadena (basic_string_view). (función miembro pública) | |
| Asigna una vista. (función miembro pública) | |
Iteradores | |
| Devuelve un iterador al inicio. (función miembro pública) | |
| Devuelve un iterador al final. (función miembro pública) | |
| Devuelve un iterador inverso al principio. (función miembro pública) | |
| Devuelve un iterador inverso al final. (función miembro pública) | |
Acceso a elementos | |
| Accede al carácter especificado. (función miembro pública) | |
| Accede al carácter especificado con comprobación de límites. (función miembro pública) | |
| Accede al primer carácter. (función miembro pública) | |
| Accede al último carácter. (función miembro pública) | |
| Devuelve un puntero al primer carácter de una vista. (función miembro pública) | |
Capacidad | |
| Devuelve el número de caracteres. (función miembro pública) | |
| Devuelve el número máximo de caracteres. (función miembro pública) | |
| Comprueba si la vista está vacía (función miembro pública) | |
Modificadores | |
| Encoge la vista moviendo su inicio hacia adelante. (función miembro pública) | |
| Encoge la vista moviendo su final hacia atrás. (función miembro pública) | |
| Intercambia el contenido. (función miembro pública) | |
Operaciones | |
| Copia caracteres. (función miembro pública) | |
| Devuelve una subcadena. (función miembro pública) | |
(C++26) |
Devuelve una subvista. (función miembro pública) |
| Compara dos vistas. (función miembro pública) | |
(C++20) |
Comprueba si la vista sobre cadena comienza con un prefijo dado. (función miembro pública) |
(C++20) |
Comprueba si la vista sobre cadena termina con un sufijo dado. (función miembro pública) |
(C++23) |
Comprueba si la vista sobre cadena contiene la subcadena o el carácter dados. (función miembro pública) |
| Encuentra caracteres en la vista. (función miembro pública) | |
| Encuentra la última ocurrencia de una subcadena. (función miembro pública) | |
| Encuentra la primer ocurrencia de caracteres. (función miembro pública) | |
| Encuentra la última ocurrencia de caracteres. (función miembro pública) | |
| Encuentra la primer ausencia de caracteres. (función miembro pública) | |
| Encuentra la última ausencia de caracteres. (función miembro pública) | |
Constantes | |
[estático] |
Valor especial. El significado exacto depende del contexto. (constante miembro pública estática) |
Funciones no-miembro
(eliminado en C++20)(eliminado en C++20)(eliminado en C++20)(eliminado en C++20)(eliminado en C++20)(C++20) |
Compara dos vistas sobre cadena lexicográficamente. (plantilla de función) |
Entrada/salida | |
| Realiza salida de flujo en vistas sobre cadena. (plantilla de función) | |
Literales
Definido en el espacio de nombres
std::literals::string_view_literals | |
(C++17) |
Crea una vista sobre cadena a partir de un literal de array de caracteres. (función) |
Clases auxiliares
| Apoyo de generación de dispersión para vistas sobre cadena (especialización de plantilla de clase) |
Plantillas auxiliares
template< class CharT, class Traits >
inline constexpr bool
ranges::enable_borrowed_range<std::basic_string_view<CharT, Traits>> = true;
|
(desde C++20) | |
Esta especialización de ranges::enable_borrowed_range hace que basic_string_view satisfaga a borrowed_range.
template< class CharT, class Traits >
inline constexpr bool
ranges::enable_view<std::basic_string_view<CharT, Traits>> = true;
|
(desde C++20) | |
Esta especialización de ranges::enable_view hace que basic_string_view satisfaga a view.
Guías de deducción |
(desde C++20) |
Notas
Es la responsabilidad del programador asegurarse que la vista sobre cadena no tenga una duración más allá que la del array de caracteres a los que apunta:
std::string_view buena{"un literal de cadena"};
// Caso "bueno": `buena` apunta a una matriz estática.
// Los literales de cadena residen en un almacenamiento de datos persistente.
std::string_view mala{"una cadena temporal"s};
// Caso "malo": `mala` mantiene un puntero pendiente
// creado por std::operator""s, se destruirá al final de la sentencia.
Las especializaciones de std::basic_string_view ya son tipos trivialmente copiables en todas las implementaciones existentes, incluso antes del requisito formal introducido en C++23.
| Macro de prueba de característica | Valor | Estándar | Comentario |
|---|---|---|---|
__cpp_lib_string_view |
201606L |
(C++17) | std::string_view
|
201803L |
(C++20) | IteradorConstexpr | |
__cpp_lib_string_contains |
202011L |
(C++23) | contains
|
Ejemplo
#include <iostream>
#include <string_view>
int main()
{
#define A "▀"
#define B "▄"
#define C "─"
constexpr std::string_view blocks[]{A B C, B A C, A C B, B C A};
for (int y{}, p{}; y != 8; ++y, p = ((p + 1) % 4))
{
for (char x{}; x != 29; ++x)
std::cout << blocks[p];
std::cout << '\n';
}
}
Salida:
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
Informes 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 3203 | C++17 | Solo los punteros, iteradores y referencias devueltos por las funciones miembro de basic_string_viewpodrían quedar invalidados. |
Todos los punteros, iteradores y referencias a elementos de basic_string_viewpueden quedar invalidados. |
Véase también
| Almacena y manipula secuencias de caracteres. (plantilla de clase) | |
| Concatena dos cadenas, o una cadena y un carácter (plantilla de función) | |
(C++20) |
Una vista que no es dueña sobre una secuencia contigua de objetos. (plantilla de clase) |
(C++11) |
Permite el uso de la sintaxis de inicialización de lista para inicializar tipos de datos no simples (plain-old data types). (plantilla de clase) |