no match for 'operator+' (operand types are 'basic_string' 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}' and 'int'),就是说并没有重载basic_string和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"后面

你可能感兴趣的:(C++基础)