隻有一個參數的構造函數可以作為轉換構造函數,預設情況下會發生隐式轉換,但是如果你對轉換構造函數加上了關鍵字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來禁止其隐式轉換)
類型轉換運算符形式: