Мне было интересно, почему скомпилирован следующий код.Оператор присваивания 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 - определенный пользователем тип. Я не перегружал задание oeprator для класса Integer. Есть ли перегруженный по умолчанию оператор?
Этот сайт описывает явные/неявные конструкторы достаточно хорошо: http://en.cppreference.com/w/cpp/language/explicit – jensa