no match for 'operator+' (operand types are 'basic_string' and 'int')
阿新 • • 發佈:2018-12-12
之前在寫程式碼的時候都沒注意過這個問題,我想將一個數字變成字元接在一個字串後面,如下所示:
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"後面