類型別轉換(轉換建構函式 & 型別轉換運算子)
阿新 • • 發佈:2021-08-06
只有一個引數的建構函式可以作為轉換建構函式,預設情況下會發生隱式轉換,但是如果你對轉換建構函式加上了關鍵字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