轉換建構函式 型別轉換運算子

2021-08-28 14:29:56 字數 968 閱讀 1482

1.先講一下隱式的類型別轉換,c++語言在內建型別之間定義了幾種自動轉換規則。同樣的我們也能為類定義隱式轉換規則。

如果建構函式只接受乙個實參,則它實際上定義了轉換為此類的隱式轉換機制,有時我們把這種建構函式稱作轉換建構函式。

(隱式轉換編譯器只會自動地執行一步,如果需要執行多步就是語法錯誤了)

例如乙個函式b有乙個引數是類a,(類a 有乙個建構函式只有乙個引數並且型別是string),那麼此時你可以用乙個string型別的c   變數給函式b呼叫。(編譯器會自動生成乙個a的臨時物件供函式b使用)( 這個過程中只轉換了一步 )

然後關鍵字 explicit 能夠抑制這種(建構函式的)隱式轉換,並且要注意它只對乙個實參的建構函式有效,而且這種情況下該關鍵字只能出現在類內的建構函式宣告處。這樣編譯器就不會進行隱式轉換,但是別忘了 顯示的強制轉換是一直允許的。例如:

a(c) 、static_castc  。

2.

型別轉換運算子 是類的一種特殊成員函式,它負責將乙個類型別的值轉換成其他型別。型別轉換函式的一般形式如下:

operator  type() const;  (注意這個叫隱式執行的)

1.  其中type 表示某種型別,型別轉換運算子可以面向任意型別(除了void外)進行定義,只要該型別能作為函式的返回型別,允       許轉換成指標或引用型別。

2.  型別轉換運算子既沒有顯示的定義返回型別,也沒有形參,而且必須定義成類的成員函式。型別轉換運算子通常不應該改變待        轉換物件的內容,因此,一般被定義成const成員。

然後在 型別轉換運算子加了關鍵字 explicit 後也是也能組織隱式的型別轉換。 例:

explicit  operator  type() const

類型別轉換(轉換建構函式 型別轉換運算子)

只有乙個引數的建構函式可以作為轉換建構函式,預設情況下會發生隱式轉換,但是如果你對轉換建構函式加上了關鍵字explicit,它就不允許隱式轉換,但是你可以通過static cast等進行強制轉換。而且只允許一步類型別轉換,什麼意思呢?比如乙個類str,它有乙個建構函式,這個建構函式只需要乙個引數,且...

轉 C 型別轉換函式(型別轉換運算子函式)

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

型別轉換運算子

在程式設計過程中,我們經常需要把一種型別轉換為另外一種型別。在轉換過程中,我們需要關心兩件事情 1。這種型別轉換是否合法?2。轉換得規則如何?c 預設自動支援幾種型別轉換 基礎型別之間的轉換 派生類指標向基類指標的轉換 非常量型別向常量型別的轉換等等。對於其他型別間的轉換,則沒 有規定。舉例來說,c...