我今天在一个程序中遇到了一个有趣的情况,我无意中将一个无符号整数分配给了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);

到底是怎么回事?编译器为什么会停止使用最后一个代码块进行构建,而是让前两个代码块进行构建?

最佳答案

因为string是可从char分配的,并且int可隐式转换为char

09-26 22:09
查看更多