#include <iostream>
using namespace std;
int main() {
string a = "";
a += '0' + 1; // got compiled
a = a + ('0' + 1); // compile error
return 0;
}
为什么第二个出现编译错误却第一个没有?
prog.cc: In function 'int main()':
prog.cc:6:11: error: no match for 'operator+' (operand types are 'std::string' {aka 'std::__cxx11::basic_string<char>'} and 'int')
6 | a = a + ('0' + 1); // compile error
| ~ ^ ~~~~~~~~~
| | |
| | int
| std::string {aka std::__cxx11::basic_string<char>}
我认为第一个'0'+ 1将获得整数提升并转为int类型, 然后编译器将尝试查找重载运算符,并尝试将int隐式转换为char。
请帮助详细解释发生了什么转换,调用了哪些重载函数,编译器做什么。
非常感谢!