no match for 'operator+' (operand types are 'basic_string<char>' and 'int')

之前在写代码的时候都没注意过这个问题,我想将一个数字变成字符接在一个字符串后面,如下所示:

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"后面

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值