std::basic_string::basic_string
(1) | ||
basic_string(); explicit basic_string( const Allocator& alloc ); |
(hasta C++17) | |
basic_string() noexcept(noexcept( Allocator() )) : basic_string( Allocator() ) {} |
(desde C++17) (hasta C++20) |
|
constexpr basic_string() noexcept(noexcept( Allocator() )) : basic_string( Allocator() ) {} |
(desde C++20) | |
(2) | ||
basic_string( size_type count, CharT ch, |
(hasta C++20) | |
constexpr basic_string( size_type count, CharT ch, |
(desde C++20) | |
(3) | ||
basic_string( const basic_string& other, size_type pos, |
(hasta C++17) | |
basic_string( const basic_string& other, size_type pos, |
(desde C++17) (hasta C++20) |
|
constexpr basic_string( const basic_string& other, size_type pos, |
(desde C++20) | |
(3) | ||
basic_string( const basic_string& other, size_type pos, |
(desde C++17) (hasta C++20) |
|
constexpr basic_string( const basic_string& other, size_type pos, |
(desde C++20) | |
(4) | ||
basic_string( const CharT* s, size_type count, |
(hasta C++20) | |
constexpr basic_string( const CharT* s, size_type count, |
(desde C++20) | |
(5) | ||
basic_string( const CharT* s, const Allocator& alloc = Allocator() ); |
(hasta C++20) | |
constexpr basic_string( const CharT* s, const Allocator& alloc = Allocator() ); |
(desde C++20) | |
(6) | ||
template< class InputIt > basic_string( InputIt first, InputIt last, |
(hasta C++20) | |
template< class InputIt > constexpr basic_string( InputIt first, InputIt last, |
(desde C++20) | |
(7) | ||
basic_string( const basic_string& other ); |
(hasta C++20) | |
constexpr basic_string( const basic_string& other ); |
(desde C++20) | |
(7) | ||
basic_string( const basic_string& other, const Allocator& alloc ); |
(desde C++11) (hasta C++20) |
|
constexpr basic_string( const basic_string& other, const Allocator& alloc ); |
(desde C++20) | |
(8) | ||
basic_string( basic_string&& other ) noexcept; |
(desde C++11) (hasta C++20) |
|
constexpr basic_string( basic_string&& other ) noexcept; |
(desde C++20) | |
(8) | ||
basic_string( basic_string&& other, const Allocator& alloc ); |
(desde C++11) (hasta C++20) |
|
constexpr basic_string( basic_string&& other, const Allocator& alloc ); |
(desde C++20) | |
(9) | ||
basic_string( std::initializer_list<CharT> ilist, const Allocator& alloc = Allocator() ); |
(desde C++11) (hasta C++20) |
|
constexpr basic_string( std::initializer_list<CharT> ilist, const Allocator& alloc = Allocator() ); |
(desde C++20) | |
(10) | ||
template < class T > explicit basic_string( const T& t, const Allocator& alloc = Allocator() ); |
(desde C++17) (hasta C++20) |
|
template < class T > explicit constexpr basic_string( const T& t, |
(desde C++20) | |
(11) | ||
template < class T > basic_string( const T& t, size_type pos, size_type n, |
(desde C++17) (hasta C++20) |
|
template < class T > constexpr basic_string( const T& t, size_type pos, size_type n, |
(desde C++20) | |
Construye nueva cadena a partir de una variedad de fuentes de datos y opcionalmente utilizando un asignador alloc
proporcionado por el usuario.
count
copias del carácter ch
. Este constructor no se usa para la deducción de argumentos de plantillas de clase si el tipo de Allocator
que se deduciría no califica como un asignador. (desde C++17)[pos, pos+count)
de other
. Si count == npos, y count
no se especifica, o si la subcadena solicitada va más allá del final de la cadena, la subcadena resultante es {tt|[pos, other.size())}}.count
caracteres de la cadena de caracteres apuntada por s
. s
puede contener caracteres nulos. La longitud de la cadena es count
. El comportamiento es indefinido si [s, s + count)
no es un rango válido.s
. La longitud de la cadena está determinada por el primer carácter nulo. El comportamiento no está definido si [s, s + Traits::length(s))
no es un rango válido (por ejemplo, si s
es un puntero nulo). Este constructor no se usa para la deducción de argumentos de plantillas de clase si el tipo Allocator
que se deduciría no califica como un asignador. (desde C++17)[first, last)
.
Si |
(hasta C++11) |
Este constructor participa en la resolución de sobrecarga si |
(desde C++11) |
other
.other
utilizando semántica de movimiento. other
se deja en un estado válido pero no especificado.ilist
.t
a una vista sobre cadena sv
como si fuera mediante std::basic_string_view<CharT, Traits> sv = t;, entonces inicializa la cadena con el contenido de sv
, como si fuera mediante basic_string(sv.data(), sv.size(), alloc). Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>> es true y std::is_convertible_v<const T&, const CharT*> es false..t
a una vista sobre cadena sv
como si fuera mediante std::basic_string_view<CharT, Traits> sv = t;, entonces inicializa la cadena con el subrango [pos, pos + n)
de sv
como si fuera mediante basic_string(sv.substr(pos, n), alloc). Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>> es true .Contenido |
[editar] Parámetros
alloc | - | Asignador a usar para todas las asignaciones de memoria de esta cadena. |
count | - | Tamaño de la cadena resultante. |
ch | - | Valor con el cual inicializar la cadena. |
first, last | - | Rango del cual copiar los caracteres. |
s | - | Puntero a una cadena de caracteres a usar como fuente para inicializar la cadena. |
other | - | Otra cadena que se utiliza como fuente para inicializar la cadena. |
ilist | - | std::initializer_list con la cual inicializar la cadena. |
t | - | Objeto (convertible a std::basic_string_view) con el cual inicializar la cadena. |
[editar] Complejidad
count
s
first
y last
other
alloc
y alloc != other.get_allocator(), entonces linealilist
[editar] Excepciones
Lanza std::length_error si la longitud de la cadena construida excediera max_size() (p. ej., si count > max_size() para (2)). Llamadas a Allocator::allocate
pueden lanzar.
[editar] Notas
La inicialización con un literal de cadena que contiene caracteres '\0' incrustados utilizan la sobrecarga (5), que se detiene en el primer carácter nulo. Esto se puede evitar especificando un constructor diferente o usando el operador de literal operator""s:
std::string s1 = "ab\0\0cd"; // s1 contiene "ab" std::string s2{"ab\0\0cd", 6}; // s2 contiene "ab\0\0cd" std::string s3 = "ab\0\0cd"s; // s3 contiene "ab\0\0cd"
[editar] Ejemplo
#include <iostream> #include <cassert> #include <iterator> #include <string> #include <cctype> int main() { { // string::string() std::string s; assert(s.empty() && (s.length() == 0) && (s.size() == 0)); } { // string::string(size_type count, charT ch) std::string s(4, '='); std::cout << s << '\n'; // "====" } { std::string const other("Exemplary"); // string::string(string const& other, size_type pos, size_type count) std::string s(other, 0, other.length()-1); std::cout << s << '\n'; // "Exemplar" } { // string::string(charT const* s, size_type count) std::string s("C-style string", 7); std::cout << s << '\n'; // "C-style" } { // string::string(charT const* s) std::string s("C-style\0string"); std::cout << s << '\n'; // "C-style" } { char mutable_c_str[] = "another C-style string"; // string::string(InputIt first, InputIt last) std::string s(std::begin(mutable_c_str)+8, std::end(mutable_c_str)-1); std::cout << s << '\n'; // "C-style string" } { std::string const other("Exemplar"); std::string s(other); std::cout << s << '\n'; // "Exemplar" } { // string::string(string&& str) std::string s(std::string("C++ by ") + std::string("example")); std::cout << s << '\n'; // "C++ by example" } { // string(std::initializer_list<charT> ilist) std::string s({ 'C', '-', 's', 't', 'y', 'l', 'e' }); std::cout << s << '\n'; // "C-style" } { // la resolución de sobrecarga selecciona // string(InputIt first, InputIt last) [con InputIt = int] // que se comporta como si se llamara a string(size_type count, charT ch) std::string s(3, std::toupper('a')); std::cout << s << '\n'; // "AAA" } }
Salida:
==== Exemplar C-style C-style C-style string Exemplar C++ by example C-style AAA
[editar] 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 2193 | C++11 | El constructor por defecto es explicit .
|
Se hizo no explicit .
|
LWG 2946 | C++17 | La sobrecarga para string_view causa ambigüedaden algunos casos. |
Se evitó haciéndola una plantilla. |
LWG 3076 | C++17 | Dos constructores pueden causar ambigüedad en la deducción de argumentos de plantillas de clase. |
Restringido. |
[editar] Véase también
Asigna caracteres a una cadena (función miembro pública) | |
Asigna valores a la cadena (función miembro pública) | |
(C++11) |
Convierte un valor de punto flotante o entero a una cadena string . (función) |
(C++11) |
Convierte un valor de punto flotante o entero a una cadena wstring . (función) |