C 類型別轉換

2021-09-23 20:56:12 字數 1044 閱讀 5358

轉換建構函式和型別轉換運算子共同定義了類型別轉換,這樣的轉換有時也被稱為使用者定義的型別轉換。

型別轉換運算子時類的一種特殊的成員函式,它負責將乙個類型別的值轉換稱其它型別,和轉換建構函式的功能恰恰相反,一般形式如下:

operator type()

const

;

其中type表示型別,型別轉換運算子可以面向任意型別進行定義,只要該型別能作為函式的返回型別。型別轉換運算子既沒有顯式的返回型別,也沒有形參,而且必須定義稱類的成員函式。型別轉換運算子通常不應該改變待轉換物件的內容,因此,型別轉換運算子一般被定義為const成員。

class myint 

;//型別轉換運算子

operator int()

const

;private:

int value_;};

intmain()

正確使用型別轉換運算子能極大簡化類設計者的工作,同時使得使用類更加容易,但是如果類型別和轉換型別之間不存在明顯的對映關係,這樣的型別轉換可能具有誤導性。

在實踐中,類很少提供型別轉換運算子,大多數情況下如果型別轉換自動發生,使用者可能會比較意外,而不是感到受了幫助。但是定義向bool型別的轉換還是比較普遍的現象。

在早期c++標準庫中istream可以隱式轉換為bool,下面**中std::cin會被轉換為bool,然後提公升為int進行左移運算,導致**能編譯通過。

int

main()

為了防止這樣的異常情況發生,c++11引入了顯式的型別轉換運算子,方法是在型別轉換運算子前面加上explicit,這樣當型別轉換是顯式時才能執行型別轉換,該規定存在乙個例外,如果表示式被用作條件,則編譯器會將顯式的型別轉換自動應用於它。

不要為類定義相同的型別轉換,例如當a類定義了乙個接受b類物件的轉換建構函式,同時b類定義了乙個轉換目標是a類的型別轉換運算子。

如果類中定義了多個轉換源或轉換目標,當這些轉換源型別或轉換目標型別可以通過其它型別轉換聯絡在一起,也會產生二義性問題。

c 類的自動型別轉換和強制型別轉換

下面討論類的型別轉換。我們先來看看c 是如何處理內建型別轉換的。將乙個標準型別變數的值賦給另一種標準型別的變數時,如果這兩種型別相容,則c 自動將這個值轉換為接受變數的型別。double time 11 int value 11 converted to type double利用建構函式將內建型別...

C 類型別隱式轉換

隱式類型別轉換 可以用單個實參來呼叫的建構函式定義了從形參型別到該型別的乙個隱式轉換。c primer 首先要單個實參,你可以把建構函式colour的預設實參去掉,也就是定義乙個物件必須要兩個引數的時候,檔案編譯不能通過。以上只是將內建型別轉換為自定義型別 過載double,int 將使用者自定義資...

C 之轉換與類型別

轉換的作用 轉換可以使類型別物件支援混合型別的表示式 通過過載操作符,可能需要幾十個過載函式 如 類型別物件與int 的算術運算等 可以用乙個實參呼叫的非explicit建構函式定義了乙個隱式轉換,當提供了實參型別的物件而需要乙個類型別物件時,編譯器將使用該轉換。這種建構函式定義了實參型別到類型別的...