顯示轉換也叫做強制型別轉換,包括下面四個:
1)static_cast
2)dynamic_cast
3)const_cast
4)reinterpret_cast
1)static_cast
編譯器隱式執行的任何型別轉換都可以有static_cast顯示完成。
2)dynamic_cast
dynamic_cast支援執行時識別指標或引用所指向的物件,可以使用dynamic_cast操作符將基類型別物件的引用或者指標轉換為同一繼承層次中其他型別的引用或者指標。要注意的是,dynamic_cast需要在程式執行時執行檢查,需要執行兩個操作。首先需要檢查被請求的轉換是否有效,如果繫結到指標或者引用的物件不是目標型別的物件,則轉換失敗,結果為0,返回0,同時丟擲異常(bad_cast)。如檢查驗證成功,那麼就會執行實際轉換,轉換成功,返回目標轉換型別,否則返回0,丟擲異常bad_cast。
#include using namespace std;
class base
virtual ~base()
void print()
};class derived1:public base
virtual ~derived1()
virtual void print()
};class derived2:public base
virtual ~derived2()
virtual void print()
};int main(int argc, char *argv)
else
return 0;
}
dynamic_cast「允許」將基類的引用或者指標賦值給派生類的引用或者指標,但是必須是「返璞歸真」。像上面的**,如果直接執行語句
derived1 *p = baseptr;
顯然是編譯不通過的,但是通過dynamic_cast的轉換,就允許了,但是這個允許的條件是baseptr必須是指向derived1的物件的指標。
3)const_cast
顧名思義,const_cast會把表示式的const性質移除。只有合法使用const_cast才能將表示式的const性質轉換掉,任何通過其他三種形式的強制轉換都會導致編譯時出錯,類似的,除了新增和刪除const特性,試圖使用const_cast來執行其他型別轉換的時候也都會告之以失敗。
4)reinterpret_cast(本質上依賴於機器)
reinterpret_cast提供了對較低層次的運算元的位模式的重新解釋。
總結:static_cast可以完成編譯器的任何隱式轉換,const_cast將目標的const特性轉換掉,dynamic_cast則是返璞歸真。
警告:強制型別轉換,少用慎用,一生受用
以上內容來自讀<>所得。
C 資料型別轉換
轉cstring cstring.format t d int 轉char 1.itoa int,char 10 10為十進位制 沒有越界檢查 2.memset szbuf,0,sizeof szbuf snprintf szbuf,sizeof szbuf d int 轉tchar itoa in...
c 資料型別轉換
隱式型別轉換 這些轉換是 c 預設的以安全方式進行的轉換,不會導致資料丟失。例如,從小的整數型別轉換為大的整數型別,從派生類轉換為基類。轉換規則從儲存範圍小的型別到儲存範圍大的型別。整數具體規則為 byte short char int long float double也就是說byte型別的變數可...
C 資料型別轉換
include include using namespace std 從型別t轉換為型別k template classt,class k k convert t tmp intmain home hejinyang clion2016.2 system cmake generated mypro...