Por que o C ++ permite que um inteiro seja atribuído a uma string?

Eu encontrei uma situação interessante hoje em um programa onde eu inadvertidamente atribuí um inteiro não assinado a um std :: string. O compilador do VisualStudio C ++ não deu nenhum aviso ou erro sobre ele, mas por acaso eu notei o bug quando executei o projeto e ele me deu caracteres inúteis para minha string.

Este é o tipo de código que parecia:

std::string my_string("");
unsigned int my_number = 1234;
my_string = my_number;

O código a seguir também compila bem:

std::string my_string("");
unsigned int my_number = 1234;
my_string.operator=(my_number);

Os seguintes resultados resultam em um erro:

unsigned int my_number = 1234;
std::string my_string(my_number);

O que está acontecendo? Como é que o compilador irá parar a compilação com o último bloco de código, mas será que os primeiros 2 blocos de código serão construídos?

questionAnswers(4)

yourAnswerToTheQuestion