¿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?

Respuestas a la pregunta(4)

Su respuesta a la pregunta