我已经使用cpp很长一段时间了,我知道我们不能添加字符串和数字(因为+操作符没有重载)。但是,我看到了这样的代码。
#include <iostream>
using namespace std;
int main() {
string a = "";
a += 97;
cout << a;
}
这个输出'a',我也试过这个。
string a ="";
a=a+97;
第二个代码给出了一个编译错误(作为+操作符,std::string
和int
的无效参数)。我不想把字符串和数字连接起来。有什么区别呢?为什么一种有效而另一种无效?
我期望a+=97
与a=a+97
相同,但它似乎不同。
第一个代码片段之所以有效,是因为std::string
覆盖了operator+=
,将一个字符附加到字符串上。97是'a'
的ASCII码,所以结果是"a"
。
第二个代码段不能工作,因为没有定义接受std::string
和int
的+
操作符,也没有将int
或char
转换为std::string
的转换构造函数。+
操作符有两次重载,都取一个char
,但编译器无法判断使用哪一个。匹配有歧义,因此报告错误。