之前在写代码的时候都没注意过这个问题,我想将一个数字变成字符接在一个字符串后面,如下所示:
int main()
{
string res = "doudou";
res = res + ('0' + 1);
cout << res << endl;
return 0;
}
但是编译发生错误:no match for 'operator+' (operand types are 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' and 'int'),就是说并没有重载basic_string<char>和int的+
这样写的话,编译器并不会把括号里的自动变成字符 '1' 追加在res后面,而是会把括号里的表达式变成int类型的49,(字符 '0' 的ASCII码是 48),相当于是一个字符串和一个整数在进行相加操作,没有任何意义,所以编译报错
要想编译器把括号里的表达式作为一个字符去看待,需要进行类型转换,让编译器知道自己的意图。
如下所示:
int main()
{
string res = "doudou";
res = res + (char)('0' + 1);
cout << res << endl;
return 0;
}
强制类型转换,让编译器将int类型的 49 看做字符 '1',然后进行相加操作,此时就没有问题了,
或者定义一个临时变量,这样看起来更自然一些
int main()
{
string res = "doudou";
char tmp = '0' + 1;
res = res + tmp;
cout << res << endl;
return 0;
}
运行结果如下所示:就是将字符 '1'追加在 字符串"doudou"后面