今天我在程序中遇到了一个有趣的情况,我不小心将无符号整数赋值给了一个std::string。VisualStudio C++编译器没有对此发出任何警告或错误,但当我运行项目并得到我的字符串的垃圾字符时,我偶然发现了这个错误。
以下是代码大致的样子:
以下是代码大致的样子:
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);
发生了什么?为什么编译器会在最后一个代码块停止构建,但允许前两个代码块构建?