1. 程式人生 > 其它 >類型別轉換(轉換建構函式 & 型別轉換運算子)

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

只有一個引數的建構函式可以作為轉換建構函式,預設情況下會發生隱式轉換,但是如果你對轉換建構函式加上了關鍵字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來禁止其隱式轉換)

型別轉換運算子形式:

operator type() const; //type可以是int、double、bool這些型別。不允許有形參,返回值型別為type