天天看點

類類型轉換(轉換構造函數 & 類型轉換運算符)

類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)

隻有一個參數的構造函數可以作為轉換構造函數,預設情況下會發生隐式轉換,但是如果你對轉換構造函數加上了關鍵字explicit,它就不允許隐式轉換,但是你可以通過static_cast等進行強制轉換。

而且隻允許一步類類型轉換,什麼意思呢?

比如一個類str,它有一個構造函數,這個構造函數隻需要一個參數,且這個參數類型為string,那麼你不可以通過str s = “qwe”來利用一個臨時str對象初始化s,因為這個臨時對象需要兩步轉換才可以成為str

第一步:把“qwe”變成string類型

第二步:把string類型通過轉換構造函數變成str類型

str s = string(“qwe”)——這個就可以

這個說明白了,我們再說一下類型轉換運算符:

比如說你在類str中定義了一個這個類型轉換成int類型的類型轉換函數,然後預設下如果在下面這種情況下:

str s;

int b;

int a = s+b;

s就會隐式轉換成int類型進行運算(也可以對它使用explicit來禁止其隐式轉換)

類型轉換運算符形式:

類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)
類類型轉換(轉換構造函數 & 類型轉換運算符)

繼續閱讀