Сегодня я обнаружил интересную ситуацию в программе, где я непреднамеренно назначил целое число без знака в std::string. Компилятор VisualStudio С++ не выдавал никаких предупреждений или ошибок об этом, но я случайно заметил ошибку при запуске проекта и дал мне ненужные символы для моей строки.
Это выглядит так:
std::string my_string("");
unsigned int my_number = 1234;
my_string = my_number;
Следующий код также отлично компилируется:
std::string my_string("");
unsigned int my_number = 1234;
my_string.operator=(my_number);
Ниже приведено сообщение об ошибке:
unsigned int my_number = 1234;
std::string my_string(my_number);
Что происходит? Почему компилятор остановит сборку с последним блоком кода, но пусть построят первые 2 блока кода?