Namespaces
Variants

std::basic_string_view<CharT,Traits>::basic_string_view

De es.cppreference.net


 
 
 
 
constexpr basic_string_view() noexcept;
(1) (desde C++17)
constexpr basic_string_view( const basic_string_view& other ) noexcept = default;
(2) (desde C++17)
constexpr basic_string_view( const CharT* s, size_type count );
(3) (desde C++17)
constexpr basic_string_view( const CharT* s );
(4) (desde C++17)
template< class It, class End >
constexpr basic_string_view( It first, End last );
(5) (desde C++20)
template< class R >
constexpr explicit basic_string_view( R&& r );
(6) (desde C++23)
basic_string_view( std::nullptr_t ) = delete;
(7) (desde C++23)
1) Constructor por defecto. Construye un std::basic_string_view vacío. Después de la construcción, data() es igual a nullptr, y size() es igual a 0.
2) Constructor de copia. Construye una vista del mismo contenido que other. Después de la construcción, data() es igual a other.data(), y size() es igual a other.size().
3) Construye una vista de los primeros count caracteres del arreglo de caracteres que comienza con el elemento apuntado por s. s puede contener caracteres nulos. El comportamiento no está definido si [s, s + count) no es un rango válido (aunque el constructor puede no acceder a ninguno de los elementos de este rango). Después de la construcción, data() es igual a s, y size() es igual a count.
4) Construye una vista de la cadena de caracteres terminada en nulo apuntada por s, sin incluir el carácter nulo de terminación. La longitud de la vista se determina como si fuera por Traits::length(s). El comportamiento no está definido si [s, s + Traits::length(s)) no es un rango válido. Después de la construcción, data() es igual a s, y size() es igual a Traits::length(s).
5) Construye un std::basic_string_view sobre el rango [first, last). El comportamiento no está definido si [first, last) no es un rango válido, si It no modela realmente contiguous_iterator, o si End no modela realmente sized_sentinel_for para It. Después de la construcción, data() es igual a std::to_address(first), y size() es igual a last - first.

Esta sobrecarga participa en la resolución de sobrecargas solo si se cumplen todas las condiciones siguientes:

6) Construye un std::basic_string_view sobre el rango r. Después de la construcción, data() es igual a ranges::data(r), y size() es igual a ranges::size(r).

Esta sobrecarga participa en la resolución de sobrecargas solo si se cumplen todas las condiciones siguientes:

  • std::remove_cvref_t<R> no es del mismo tipo que std::basic_string_view,
  • R modela contiguous_range y sized_range,
  • ranges::range_value_t<R> y CharT son del mismo tipo,
  • R no es convertible a const CharT*, y
  • Sea d un lvalue de tipo std::remove_cvref_t<R>, d.operator ::std::basic_string_view<CharT, Traits>() no es una expresión válida.
7) std::basic_string_view no se puede construir desde nullptr.

Parámetros

other - otra vista con la cual inicializar la vista
s - puntero a un arreglo de caracteres o una cadena C con la cual inicializar la vista
count - número de caracteres a incluir en la vista
first - iterador al primer carácter de la secuencia
last - iterador después del último carácter de la secuencia u otro centinela
r - un rango contiguo que contiene la secuencia

Complejidad

1-3,5,6) Constante.
4) Lineal en la longitud de s .

Ejemplo

#include <array>
#include <iomanip>
#include <iostream>
#include <string>
#include <string_view>
int main()
{
    std::string cppstr = "Foo";
    std::string_view cppstr_v(cppstr); // sobrecarga (2), después de
                                       // std::string::operator string_view
    std::cout << "1) cppstr_v: " << std::quoted(cppstr_v) << '\n';
    char array[3] = {'B', 'a', 'r'};
    std::string_view array_v(array, std::size(array)); // sobrecarga (3)
    std::cout << "2) array_v: " << std::quoted(array_v) << '\n';
    const char* one_0_two = "One\0Two";
    std::string_view one_two_v{one_0_two, 7}; // sobrecarga (3)
    std::cout << "3) one_two_v: \"";
    for (char c : one_two_v)
        std::cout << (c != '\0' ? c : '?');
    std::cout << "\", one_two_v.size(): " << one_two_v.size() << '\n';
    std::string_view one_v{one_0_two}; // sobrecarga (4)
    std::cout << "4) one_v: " << std::quoted(one_v) << ", one_v.size(): " 
              << one_v.size() << '\n';
    constexpr std::wstring_view wcstr_v = L"xyzzy"; // sobrecarga (4)
    std::cout << "5) wcstr_v.size(): " << wcstr_v.size() << '\n';
    std::array ar = {'P', 'u', 'b'};
    std::string_view ar_v(ar.begin(), ar.end()); // sobrecarga (5), C++20
    std::cout << "6) ar_v: " << std::quoted(ar_v) << '\n';
//  std::string_view ar_v2{ar}; // sobrecarga (6), OK en C++23
//  std::cout << "ar_v2: " << std::quoted(ar_v2) << '\n'; // ar_v2: "Pub"
    [[maybe_unused]] auto zero = [] { /* ... */ return nullptr; };
//  std::string_view s{zero()}; // sobrecarga (7), no compilará desde C++23
}

Salida:

1) cppstr_v: "Foo"
2) array_v: "Bar"
3) one_two_v: "One?Two", one_two_v.size(): 7
4) one_v: "One", one_v.size(): 3
5) wcstr_v.size(): 5
6) ar_v: "Pub"

Véase también

asigna una vista
(función miembro pública)
construye un basic_string
(función miembro pública de std::basic_string<CharT,Traits,Allocator> )