我想知道为什么以下代码被成功编译。
#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类的赋值操作符过载。是否有默认的重载运算符?
您尚未声明Integer
构造函数explicit
,因此它充当从int
到的隐式转换Integer
。
如果您声明构造函数
explicit Integer(int value);
编译器将引发错误:
错误:请求从'int'转换为非标量类型'Integer'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句