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;
}

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

保罗·M

您尚未声明Integer构造函数explicit,因此它充当从int的隐式转换Integer

如果您声明构造函数

explicit Integer(int value);

编译器将引发错误:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章