C++赋值运算符和重载

Mic*_*sei 4 c++

我想知道为什么以下代码正在成功编译.

#include <iostream>
#include <cassert>
using namespace std;

class Integer{
private:
    int i;
public:
    Integer(int value):i(value){}
    // unary or binary
    const Integer operator+(const Integer& rv){
        cout << "operator+"<< endl;
        return Integer(i + rv.i);
    }
    // Binary Operator
    Integer& operator+=(const Integer& rv){
        cout << "operator+=" << endl;
        i += rv.i;
        return *this;
    }
    ostream& operator<<(ostream& lv){
        lv << i;
        return lv;
    }
    friend ostream& operator<< (ostream& lv, Integer& rv);
};

ostream& operator<< (ostream& lv,Integer& rv){
    return lv << rv.i;
}

int main(){
    cout << "using operator overloading"<< endl;

    Integer c(0), a(4), b(5);
    Integer d = 8;
    c = a + b;
    cout << c << endl;
    cout << d << endl;
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么d = 8是可能的.d是用户定义的类型.我没有重载Integer类的赋值oeprator.是否有默认重载运算符?

Pao*_*o M 8

您还没有申报的Integer构造函数explicit,所以它作为从隐式转换intInteger.

如果你声明你的构造函数

explicit Integer(int value);
Run Code Online (Sandbox Code Playgroud)

编译器触发错误:

错误:请求从'int'转换为非标量类型'Integer'