Encontré una situación interesante hoy en un programa en el que inadvertidamente asigné un entero sin signo a std :: string. El compilador de VisualStudio C++ no dio ninguna advertencia o error al respecto, pero me fijé en el error cuando ejecuté el proyecto y me dio caracteres no deseados para mi cadena.¿Por qué C++ permite asignar un número entero a una cadena?
Esto es algo de lo que el código parecía:
std::string my_string("");
unsigned int my_number = 1234;
my_string = my_number;
El siguiente código también compila bien:
std::string my_string("");
unsigned int my_number = 1234;
my_string.operator=(my_number);
los siguientes resultados en un error:
unsigned int my_number = 1234;
std::string my_string(my_number);
Lo ¿está pasando? ¿Cómo es que el compilador detendrá la compilación con el último bloque de código, pero dejar que los primeros 2 bloques de código se creen?
¿Cuáles son los errores del compilador? Para mí, g ++ v4.4 compila y funciona correctamente – CsTamas
Lo siento, cometí un error con el 2º bloque de código: compila. El último falla con un error acerca de no tener un constructor std :: string que acepte un int sin firmar. – user55417