Espacios de nombres
Variantes
Acciones

std::from_chars

De cppreference.com
< cpp‎ | utility
 
 
 
Definido en el archivo de encabezado <charconv>
std::from_chars_result from_chars(const char* first, const char* last,
                                  /*véase abajo*/& value, int base = 10);
(1) (desde C++17)
std::from_chars_result from_chars(const char* first, const char* last, float& value,
                                  std::chars_format fmt = std::chars_format::general);
(2) (desde C++17)
std::from_chars_result from_chars(const char* first, const char* last, double& value,
                                  std::chars_format fmt = std::chars_format::general);
(3) (desde C++17)
std::from_chars_result from_chars(const char* first, const char* last, long double& value,
                                  std::chars_format fmt = std::chars_format::general);
(4) (desde C++17)
struct from_chars_result {

    const char* ptr;
    std::errc ec;

};
(5) (desde C++17)

Analiza la secuencia de caracteres [first,last) por un patrón definido posteriormente. Si los caracteres no coinciden con el patrón o si el valor obtenido al analizar los caracteres coincidentes no son representables del tipo de value, value no se modifica, de otra manera los caracteres que coinciden con el patrón se interpretan como una representación de texto de un valor aritmético, que se almacena en value.

1) Analizadores de enteros: Esperan un patrón idéntico al usado por std::strtol en la configuración regional por defecto ("C") y la base numérica dada diferente de cero, excepto que:
  • los prefijos "0x" o "0X" no se reconocen para la base 16;
  • solamente el signo menos se reconoce (no el signo más), y solamente para tipos enteros de value con signo.
La biblioteca proporciona sobrecargas para todos los tipos enteros con signo y sin signo y char como el tipo referenciado del parámetro value.
2-4) Analizadores de punto flotante: Esperan un patrón idéntico al usado por std::strtod en la configuración regional por defecto ("C") excepto que: En cualquier caso, el valor resultante es uno de a lo más dos valores de punto flotante más cercanos al valor de la cadena que coincide con el patrón, después de redondear de acuerdo a std::round_to_nearest.
5) El tipo de retorno (véase Valore de retorno posteriormente)

Contenido

[editar] Parámetros

first, last - rango de caracteres válido a analizar
value - el parámetro de salida donde se almacena el valor analizado si se tiene éxito
base - la base entera a usar: un valor entre 2 y 36 (inclusive).
fmt - el formato de punto flotante a usar, una máscara de bits de tipo std::chars_format

[editar] Valor de retorno

Si se tiene éxito, devuelve un valor de tipo from_chars_result tal que ptr apunta al primer carácter que no coincide con el patrón, o tiene el valor igual a last si todos los caracteres coinciden y ec es inicializado con inicialización de un valor.

Si no hay coincidencia del patrón, devuelve un valor de tipo from_chars_result tal que ptr es igual a first y ec es igual a std::errc::invalid_argument. value no se modifica.

Si el patrón coincidió, pero el valor analizado no se encuentra en el rango representable por el tipo de value, devuelve un valor de tipo from_chars_result tal que ec es igual a std::errc::result_out_of_range y ptr apunta al primer carácter que no coincide con el patrón. value no se modifica.

operator==(std::from_chars_result)

friend bool operator==( const from_chars_result&,
                        const from_chars_result& ) = default;
(desde C++20)

Comprueba si ptr y ec de ambos argumentos son iguales, respectivamente.

Esta función es no visible(s) a una búsqueda no calificada o calificada, y puede encontrarse solamente mediante búsqueda dependiente de argumento cuando std::from_chars_result es una clase asociada de los argumentos.

[editar] Excepciones

(ninguna)

[editar] Notas

A diferencia de otras funciones de análisis en C++ y C libraries, std::from_chars es independiente de la configuración regional, no asigna memoria y no lanza excepciones. Solamente se proporcionan un pequeño subconjunto de políticas de formato usadas por otras bibliotecas (tales como std::sscanf). Se pretende así permitir la implementación más rápida posible que sea útil en contextos comunes de alta capacidad de procesamiento, tales como intercambio basado en texto (JSON o XML).

La garantía que std::from_chars pueda recuperar de manera exacta cada valor de punto flotante formateado por std::to_chars se proporciona solamente si ambas funciones son de la misma implementación.

Un patrón que consiste en un signo sin dígitos subsecuentes se trata como un patrón que no coincidió con nada.

[editar] Ejemplo

#include <iostream>
#include <charconv>
#include <array>
 
int main()
{
    std::array<char, 10> str{"42"};
    int result;
    if(auto [p, ec] = std::from_chars(str.data(), str.data()+str.size(), result);
       ec == std::errc())
        std::cout << result;
}

Salida:

42

[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 2955 C++17 Esta función estaba en el archivo de encabezado <utility>
y usaba std::error_code
Se movió a <charconv> y usa std::errc

[editar] Véase también

(C++17)
Convierte un valor entero o de punto flotante a una secuencia de caracteres.
(función) [editar]
(C++11)(C++11)(C++11)
convierte una cadena a un entero con signo
Original:
converts a string to an signed integer
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función) [editar]
(C++11)(C++11)(C++11)
convierte una cadena en un valor de coma flotante
Original:
converts a string to an floating point value
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función) [editar]
Convierte una cadena de bytes en un valor entero.
(función) [editar]
Convierte una cadena de bytes en un valor de punto flotante.
(función) [editar]
lee la entrada con formato desde stdin, una secuencia de archivo o un tampón
Original:
reads formatted input from stdin, a file stream or a buffer
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función) [editar]
extraer datos con formato
(función miembro pública de std::basic_istream) [editar]