Namespaces
Variants

std::to_string

De es.cppreference.net
 
 
 
std::basic_string
 
Definido en el encabezado <string>
std::string to_string( int value );
(1) (desde C++11)
std::string to_string( long value );
(2) (desde C++11)
std::string to_string( long long value );
(3) (desde C++11)
std::string to_string( unsigned value );
(4) (desde C++11)
std::string to_string( unsigned long value );
(5) (desde C++11)
std::string to_string( unsigned long long value );
(6) (desde C++11)
std::string to_string( float value );
(7) (desde C++11)
std::string to_string( double value );
(8) (desde C++11)
std::string to_string( long double value );
(9) (desde C++11)

Convierte un valor numérico a std::string.

Sea buf un búfer interno para las funciones de conversión, suficientemente grande para contener el resultado de la conversión.

1) Convierte un entero con signo a una cadena como si fuera por std::sprintf(buf, "%d", value).
2) Convierte un entero con signo a una cadena como si fuera por std::sprintf(buf, "%ld", value).
3) Convierte un entero con signo a una cadena como si fuera por std::sprintf(buf, "%lld", value).
4) Convierte un entero sin signo a una cadena como si fuera por std::sprintf(buf, "%u", value).
5) Convierte un entero sin signo a una cadena como si fuera por std::sprintf(buf, "%lu", value).
6) Convierte un entero sin signo a una cadena como si fuera por std::sprintf(buf, "%llu", value).
7,8) Convierte un valor de punto flotante a una cadena como si fuera por std::sprintf(buf, "%f", value).
9) Convierte un valor de punto flotante a una cadena como si fuera por std::sprintf(buf, "%Lf", value).
(hasta C++26)
1-9) Convierte un valor numérico a una cadena como si fuera por std::format("{}", value).
(desde C++26)

Parámetros

value - un valor numérico a convertir

Valor de retorno

Una cadena que contiene el valor convertido.

Excepciones

Puede lanzar std::bad_alloc desde el constructor de std::string .

Notas

  • Con tipos de punto flotante std::to_string puede producir resultados inesperados ya que el número de dígitos significativos en la cadena devuelta puede ser cero, consulte el ejemplo.
  • El valor de retorno puede diferir significativamente de lo que std::cout imprime por defecto, consulte el ejemplo.
  • std::to_string depende de la configuración regional actual de C para fines de formato, y por lo tanto las llamadas concurrentes a std::to_string desde múltiples hilos pueden resultar en una serialización parcial de las llamadas.
    • Los resultados de las sobrecargas para tipos enteros no dependen de la configuración regional actual de C, y por lo tanto las implementaciones generalmente evitan el acceso a la configuración regional actual de C en estas sobrecargas tanto para corrección como para rendimiento. Sin embargo, dicha evitación no está garantizada por el estándar.
(hasta C++26)

C++17 proporciona std::to_chars como una alternativa de mayor rendimiento e independiente de la configuración regional.

Macro de prueba de características Valor Estándar Característica
__cpp_lib_to_string 202306L (C++26) Redefinir std::to_string en términos de std::format

Ejemplo

#include <cstdio>
#include <format>
#include <initializer_list>
#include <iostream>
#include <string>
#if __cpp_lib_to_string >= 202306L
constexpr auto revision() { return " (post C++26)"; }
#else
constexpr auto revision() { return " (pre C++26)"; }
#endif
int main()
{
    for (const double f : {1.23456789555555, 23.43, 1e-9, 1e40, 1e-40, 123456789.0})
    {
        std::cout << "to_string:\t" << std::to_string(f) << revision() << '\n';
        // Antes de C++26, la salida de std::to_string coincide con std::printf.
        std::printf("printf:\t\t%f\n", f);
        // A partir de C++26, la salida de std::to_string coincide con std::format.
        std::cout << std::format("format:\t\t{}\n", f);
        std::cout << "std::cout:\t" << f << "\n\n";
    }
}

Salida posible:

to_string:      1.234568 (pre C++26)
printf:         1.234568
format:         1.23456789555555
std::cout:      1.23457
to_string:      23.430000 (pre C++26)
printf:         23.430000
format:         23.43
std::cout:      23.43
to_string:      0.000000 (pre C++26)
printf:         0.000000
format:         1e-09
std::cout:      1e-09
to_string:      10000000000000000303786028427003666890752.000000 (pre C++26)
printf:         10000000000000000303786028427003666890752.000000
format:         1e+40
std::cout:      1e+40
to_string:      0.000000 (pre C++26)
printf:         0.000000
format:         1e-40
std::cout:      1e-40
to_string:      123456789.000000 (pre C++26)
printf:         123456789.000000
format:         123456789
std::cout:      1.23457e+08

Véase también

(C++11)
convierte un valor entero o de punto flotante a wstring
(función)
(C++11) (C++11)
convierte una cadena a un entero sin signo
(función)
(C++11) (C++11) (C++11)
convierte una cadena a un entero con signo
(función)
(C++11) (C++11) (C++11)
convierte una cadena a un valor de punto flotante
(función)
(C++17)
convierte un valor entero o de punto flotante a una secuencia de caracteres
(función)