Espacios de nombres
Variantes
Acciones

std::to_chars

De cppreference.com
< cpp‎ | utility
 
 
Biblioteca de servicios
 
Definido en el archivo de encabezado <charconv>
std::to_chars_result to_chars(char* first, char* last,
                              /*véase abajo*/ value, int base = 10);
(1) (desde C++17)
std::to_chars_result to_chars(char*, char*, bool, int = 10) = delete;
(2) (desde C++17)
std::to_chars_result to_chars(char* first, char* last, float       value);

std::to_chars_result to_chars(char* first, char* last, double      value);

std::to_chars_result to_chars(char* first, char* last, long double value);
(3) (desde C++17)
std::to_chars_result to_chars(char* first, char* last, float       value,

                              std::chars_format fmt);
std::to_chars_result to_chars(char* first, char* last, double      value,
                              std::chars_format fmt);
std::to_chars_result to_chars(char* first, char* last, long double value,

                              std::chars_format fmt);
(4) (desde C++17)
std::to_chars_result to_chars(char* first, char* last, float       value,

                              std::chars_format fmt, int precision);
std::to_chars_result to_chars(char* first, char* last, double      value,
                              std::chars_format fmt, int precision);
std::to_chars_result to_chars(char* first, char* last, long double value,

                              std::chars_format fmt, int precision);
(5) (desde C++17)
struct to_chars_result {

    char* ptr;
    std::errc ec;

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

Convierte a value en una cadena de caracteres llenando sucesivamente el rango [first, last), donde [first, last) se requiere que sea un rango válido.

1) Formateadores de enteros: value se convierte a una cadena de dígitos en la base dada (sin ceros redundantes al inicio). Los dígitos en el rango 10..35 (inclusive) se representan con los caracteres en minúsculas a..z. Si el valor es menor que cero, la representación empieza con el signo menos. La biblioteca proporciona sobrecargas para todos los tipos enteros con signo y sin signo y para el tipo char como el tipo del parámetro value.
2) La sobrecarga para bool está eliminada. to_chars rechaza los argumentos de tipo bool porque el resultado sería "0"/"1" pero no "false"/"true" si se permite.
3) value se convierte a una cadena como si se hubiera llamado a std::printf en la configuración regional por defecto ("C"). El especificador de conversión es f o e (que resuelve a favor de f en caso de un empate), escogido de acuerdo al requisito para una representación más corta: la representación de la cadena consiste en el número de caracteres más pequeño tal que existe al menos un dígito antes del punto base (si está presente) y el analizar la representación usando la función correspondiente std::from_chars recupera exactamente el valor. Si existen varias de tales representaciones, se escoge una con la diferencia de value más pequeña, resolviendo cualquier otro empate restante usando redondeo de acuerdo a std::round_to_nearest
4) Lo mismo que (3), pero la conversion especificada para "como si se hubiera llamado a printf" es f si fmt es std::chars_format::fixed, e si fmt es std::chars_format::scientific, a (pero sin el "0x" inicial en el resultado) si fmt es std::chars_format::hex, y g si fmt es chars_format::general.
5) Lo mismo que (4), excepto que la precisión se especifica por el parámetro precision en vez del requisito de la representación más corta.
6) El tipo de retorno (véase Valor de retorno más abajo). std::to_chars_result no tiene clases base, ni ningún miembro excepto ptr, ec y las funciones miembro especiales implícitamente declaradas.

Contenido

[editar] Parámetros

first, last - rango de caracteres al cual escribir
value - el valor a convertir a su representación de cadena
base - base entera a usar: un valor entre 2 y 36 (inclusive)
fmt - formato de punto flotante a usar, una máscara de bits de tipo std::chars_format
precision - precisión de punto flotante a usar

[editar] Valor de retorno

Si tiene éxito, devuelve un valor de tipo to_chars_result tal que ec es igual a std::errc inicializado por valor y ptr un puntero con un valor de un elemento después del final de la secuencia de caracteres escritos. Observa que la cadena no termina en nulo.

Si existe un error, devuelve un valor de tipo to_chars_result que mantiene std::errc::value_too_large en ec, una copia de last en ptr, y deja el contenido del rango [first, last) en un estado indeterminado.

operator==(std::to_chars_result)

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

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

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

[editar] Excepciones

(ninguna)

[editar] Notas

A diferencia de otras funciones de formato en las bibliotecas de C++ y C, std::to_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::sprintf). 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 todos los valores de punto flotante formateado por to_chars se proporciona solamente si ambas funciones son parte de la misma implementación.

Se requiere que se convierta explícitamente un valor bool a otro tipo de entero si se desea formatear el valor como "0"/"1".

[editar] Ejemplo

#include <iostream>
#include <charconv>
#include <system_error>
#include <string_view>
#include <array>
 
int main()
{
    std::array<char, 10> str;
 
    if(auto [ptr, ec] = std::to_chars(str.data(), str.data() + str.size(), 42);
       ec == std::errc())
         std::cout << std::string_view
	       (str.data(), ptr);              // C++20 utiliza string_view(first, last)
	  //   (str.data(), ptr - str.data()); // C++17, utiliza string_view(ptr, length)
}

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
LWG 3266 C++17 El argumento bool se aceptaba y se promovía a int Rechazado por una sobrecarga eliminada
LWG 3373 C++17 to_chars_result podría tener miembros adicionales se prohibieron los miembros adicionales

[editar] Véase también

Convierte una secuencia de caracteres a un valor entero o de punto flotante
(función) [editar]
(C++11)
Convierte un valor de punto flotante o entero a una cadena string.
(función) [editar]
Imprime la salida formateada para stdout, una secuencia de archivo o un búfer.
(función) [editar]
Inserta datos con formato.
(función miembro pública de std::basic_ostream<CharT,Traits>) [editar]