C ++编译有关运算符重载,类型转换和int提升的错误

时间:2019-05-16 20:15:01

标签: c++ type-conversion operator-overloading

#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。

请帮助详细解释发生了什么转换,调用了哪些重载函数,编译器做什么。

非常感谢!

0 个答案:

没有答案