¿Por qué C ++ permite que se asigne un entero a una cadena?
Hoy me encontré con una situación interesante en un programa en el que asigné involuntariamente un entero sin signo a un std :: string. El compilador de VisualStudio C ++ no dio ninguna advertencia o error al respecto, pero me di cuenta del error cuando ejecuté el proyecto y me dio caracteres no deseados para mi cadena.
Este es el tipo de código:
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);
Que esta pasando? ¿Por qué el compilador detendrá la compilación con el último bloque de código, pero permitirá que se construyan los primeros 2 bloques de código?