我今天在一个程序中遇到了一个有趣的情况,我无意中将一个无符号整数分配给了 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);
到底是怎么回事?为什么编译器会用最后一个代码块停止构建,但让前 2 个代码块构建?