[英]C++ assignment operator and overloading
我想知道為什么以下代碼正在成功編譯。
#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類的賦值oeprator。 是否有默認重載運算符?
您尚未聲明Integer
構造函數是explicit
,因此它充當從int
到Integer
的隱式轉換。
如果你聲明你的構造函數
explicit Integer(int value);
編譯器觸發錯誤:
錯誤:請求從'int'轉換為非標量類型'Integer'
您的構造函數定義從int到Integer的轉換
Integer(int value):i(value){}
我不明白為什么d = 8是可能的。 d是用戶定義的類型。
只需更多地檢測代碼並跟蹤ctor調用。
#include <iostream>
#include <cassert>
using namespace std;
class Integer{
private:
int i;
public:
Integer(int value):i(value){
cout << "Integer(int) called with " << value << endl;
}
// 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(){
Integer d = 8;
cout << d << endl;
}
輸出:
Integer(int) called with 8
8
住在Coliru's
事實上,假定的立即8的賦值導致非顯式的 Integer(int)
ctor被調用,其中8作為其參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.