std::to_chars
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); |
(3) | (desde C++17) |
std::to_chars_result to_chars(char* first, char* last, float 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); |
(5) | (desde C++17) |
struct to_chars_result { char* ptr; |
(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.
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
.to_chars
rechaza los argumentos de tipo bool porque el resultado sería "0"/"1" pero no "false"/"true" si se permite.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_nearestfmt
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.precision
en vez del requisito de la representación más corta.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
(C++17) |
Convierte una secuencia de caracteres a un valor entero o de punto flotante (función) |
(C++11) |
Convierte un valor de punto flotante o entero a una cadena string . (función) |
(C++11) |
Imprime la salida formateada para stdout, una secuencia de archivo o un búfer. (función) |
Inserta datos con formato. (función miembro pública de std::basic_ostream<CharT,Traits> )
|