【发布时间】:2010-11-13 17:51:38
【问题描述】:
我今天在一个程序中遇到了一个有趣的情况,我无意中将一个无符号整数分配给了 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);
发生了什么事?为什么编译器会停止最后一个代码块的构建,而让前两个代码块构建?
【问题讨论】:
-
什么是编译器错误?对我来说,g++ v4.4 可以正常编译和工作
-
对不起,我在第二个代码块上犯了一个错误——它确实可以编译。最后一个失败,错误在于没有接受 unsigned int 的 std::string 构造函数。
标签: c++ string stl variable-assignment