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() ) {} explicit basic_string( const Allocator& alloc ) noexcept; |
(desde C++17) (hasta C++20) |
|
constexpr basic_string() noexcept(noexcept( Allocator() )) : basic_string( Allocator() ) {} explicit constexpr basic_string( const Allocator& alloc ) noexcept; |
(desde C++20) | |
| (2) | ||
basic_string( size_type count, CharT ch, const Allocator& alloc = Allocator() ); |
(hasta C++20) | |
constexpr basic_string( size_type count, CharT ch, const Allocator& alloc = Allocator() ); |
(desde C++20) | |
| (3) | ||
basic_string( const basic_string& other, size_type pos, size_type count = std::basic_string::npos, const Allocator& alloc = Allocator() ); |
(hasta C++17) | |
basic_string( const basic_string& other, size_type pos, const Allocator& alloc = Allocator() ); |
(desde C++17) (hasta C++20) |
|
constexpr basic_string( const basic_string& other, size_type pos, const Allocator& alloc = Allocator() ); |
(desde C++20) | |
| (3) | ||
basic_string( const basic_string& other, size_type pos, size_type count, const Allocator& alloc = Allocator() ); |
(desde C++17) (hasta C++20) |
|
constexpr basic_string( const basic_string& other, size_type pos, size_type count, const Allocator& alloc = Allocator() ); |
(desde C++20) | |
| (4) | ||
basic_string( const CharT* s, size_type count, const Allocator& alloc = Allocator() ); |
(hasta C++20) | |
constexpr basic_string( const CharT* s, size_type count, const Allocator& alloc = Allocator() ); |
(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, const Allocator& alloc = Allocator() ); |
(hasta C++20) | |
template< class InputIt > constexpr basic_string( InputIt first, InputIt last, const Allocator& alloc = Allocator() ); |
(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, const Allocator& alloc = Allocator() ); |
(desde C++20) | |
| (11) | ||
template < class T > basic_string( const T& t, size_type pos, size_type n, const Allocator& alloc = Allocator() ); |
(desde C++17) (hasta C++20) |
|
template < class T > constexpr basic_string( const T& t, size_type pos, size_type n, const Allocator& alloc = Allocator() ); |
(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 .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. |
Complejidad
countsfirst y lastotheralloc y alloc != other.get_allocator(), entonces linealilistExcepciones
pos > other.size()alloc == str.get_allocator()pos está fuera de rangoLanza 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.
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"
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
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. |
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) |