Espacios de nombres
Variantes
Acciones

Guías de deducción para std::basic_string

De cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
Definido en el archivo de encabezado <string>
template<typename InputIt, typename Alloc =std::allocator<

                          typenamestd::iterator_traits<InputIt>::value_type>>
basic_string(InputIt, InputIt, Alloc = Alloc())
-> basic_string<typenamestd::iterator_traits<InputIt>::value_type,
                std::char_traits<typenamestd::iterator_traits<InputIt>::value_type>,

                Alloc>;
(1) (desde C++17)
template<typename CharT,

         typename Traits,
         typename Alloc =std::allocator<CharT>>
explicit basic_string(std::basic_string_view<CharT, Traits>, const Alloc&= Alloc())

-> basic_string<CharT, Traits, Alloc>;
(2) (desde C++17)
template<typename CharT,

         typename Traits,
         typename Alloc =std::allocator<CharT>>>
basic_string(std::basic_string_view<CharT, Traits>, typename/*véase más abajo*/::size_type,
             typename/*véase más abajo*/::size_type, const Alloc&= Alloc())

    -> basic_string<CharT, Traits, Alloc>;
(3) (desde C++17)
1) Esta guía de deducción se proporciona para std::basic_string para permitir la deducción desde un rango de iteradores. Esta sobrecarga solo participa en la resolución de sobrecargas si InputIt satisface a InputIterator y Alloc satisface a Allocator.
2-3) Estas guías de deducción se proporcionan para std::basic_string para permitir la deducción desde una vista sobre cadena, std::basic_string_view. El parámetro size_type en (3) se refiere al tipo miembro size_type del tipo deducido por la guía de deducción. Estas sobrecargas solo participan en la resolución de sobrecargas si Alloc satisface a Allocator.

Nota: no se especifica hasta qué grado la biblioteca determina que un tipo no satisface a IteradorDeEntradaLegado, excepto que, como mínimo, los tipos enteros no califican como iteradores de entrada. Del mismo modo, no se especifica en qué medida se determina que un tipo no satisface a Allocator, excepto que, como mínimo, el tipo miembro Alloc::value_type debe existir y la expresión std::declval<Alloc &>().allocate(std::size_t{}) debe estar bien formada cuando se trate como un operando no evaluado.

[editar] Notas

Las guías (2-3) se necesitan porque los constructores de std::basic_string para vistas sobre cadena, std::basic_string_view, están hechos plantillas para evitar causar ambigüedades en código existente, y esas plantillas no soportan la deducción de argumentos de plantillas de clase.

[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 3075 C++17 La deducción desde una vista sobre cadena, basic_string_view,

no se soportaba (exacerbado por Asunto LWG 2946).

Se añadieron las guías de deducción.

[editar]Ejemplo

#include <string>#include <vector>int main(){std::vector<char> v ={'a', 'b', 'c'};std::basic_string s(v.begin(), v.end());// utiliza guía de deducción explícita}


close