1. 程式人生 > >no match for 'operator+' (operand types are 'basic_string' and 'int')

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