我想知道为什么以下代码正在成功编译.
#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.是否有默认重载运算符?
您还没有申报的Integer构造函数explicit,所以它作为从隐式转换int到Integer.
如果你声明你的构造函数
explicit Integer(int value);
Run Code Online (Sandbox Code Playgroud)
编译器触发错误:
错误:请求从'int'转换为非标量类型'Integer'