c 中操作符過載形參與轉換建構函式的衝突

2021-06-18 06:05:28 字數 764 閱讀 5665

在c++中,我們一般比較習慣在當函式的引數是物件時只傳遞引用,這樣更加節省資源與時間。操作符過載函式也不例外。但是當轉換建構函式與操作符過載同時存在時編譯就會出問題。

下面的**中操作符過載的形參是物件,不是引用。這樣編譯可以執行。但是當把形參改為引用是就編譯不通過報錯如下:

main.cpp|38|error: no match for 'operator+' in 'c1 + 2.5299999999999998e+0'|

即使顯示的進行轉換complex(2.53)也無法通過編譯。但是如果將2.53改c2,則運算子過載的形參又可以使用引用。

新手,原因目前還不清楚。

#include#includeusing namespace std;

class complex

complex(double r,double i):real(r),imag(i){}

complex(double r)

friend complex operator + (complex c1,complex c2);

void display();

private:

double real;

double imag;

};complex operator + (complex c1,complex c2)

void complex::display()

int main()

轉換建構函式 複製建構函式 操作符過載

用轉換建構函式可以將乙個指定型別的資料轉換為類的物件 但是不能反過來將乙個類的物件轉換為乙個其他型別的資料 例如將乙個complex類物件轉換成double型別資料 c 提供型別轉換函式 type conversion function 來解決這個問題 型別轉換函式的作用是將乙個類的物件轉換成另一型...

C 過載型別轉換操作符

在需要做資料型別轉換時,一般顯式的寫法是 cpp view plain copy font size 18px type1 i type2 d i type1 d 顯式的寫型別轉,把d從type2型別轉為type1型別 這種寫法不能做到無縫轉換,也就是直接寫 i d,而不需要顯式的寫 type1 來...

C 過載操作符與轉換

明智的使用操作符過載可以使類型別的使用像內建型別一樣直觀。過載操作符必須具有至少乙個類型別或列舉型別的運算元,這條規則強制過載操作符不能重新定義用於內建型別物件的操作符的含義。過載操作符並不保證運算元的求值順序,尤其是,不會保證內建邏輯and 邏輯or和逗號操作符的運算元求值,在 和 的過載版本中,...