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:
Itsatisface contiguous_iterator,Endsatisface sized_sentinel_for paraIt,std::iter_value_t<It>yCharTson del mismo tipo, yEndno es convertible a std::size_t.
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 questd::basic_string_view,Rmodela contiguous_range y sized_range,ranges::range_value_t<R>yCharTson del mismo tipo,Rno es convertible aconst CharT*, y- Sea
dun lvalue de tipostd::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
Ejecutar este código
#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>
)
|