c++強制型別轉換分為四種,static_cast
,dynamic_cast
,const_cast
,reinterpret_cast
一.為什麼在c++中還有特殊的四種強制轉換
二.static_cast
三.const_cast#include
< iostream>
intmain()
四.reinterpret_cast#include
< iostream>
intmain()
四.dynamic_cast#include
< iostream>
#include
< cstdint>
using namespace std;
intmain()
用法:dynamic_cast(expression)
(1)其他三種都是編譯時完成的,dynamic_cast是執行時處理的,執行時要進行型別檢查。
(2)不能用於內建的基本資料型別的強制轉換。
(3)dynamic_cast轉換如果成功的話返回的是指向類的指標或引用,轉換失敗的話,如果是指標返回nullptr,如果是引用丟擲異常
(4)使用dynamic_cast進行轉換的,基類中一定要有虛函式,否則編譯不通過。
(5)在類的轉換時,在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的。在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全。
向上轉換,即為子類指標指向父類指標(一般不會出問題);向下轉換,即將父類指標轉化子類指標。
向下轉換的成功與否還與將要轉換的型別有關,即要轉換的指標指向的物件的實際型別與轉換以後的物件型別一定要相同,否則轉換失敗。
在c++中,編譯期的型別轉換有可能會在執行時出現錯誤,特別是涉及到類物件的指標或引用操作時,更容易產生錯誤。dynamic_cast操作符則可以在執行期對可能產生問題的型別轉換進行測試。
#include #include #include using namespace std;
class base
base(string s) :str(s){}
virtual void print()
private:
string str;
};class derived:public base
derived(string s,int i) :base(s),ival(i){}
void print()
void print_ival()
private:
int ival;
};int main()
else
//引用dynamic_cast
base& rf = de;
trycatch (const std::bad_cast& ex)
return 0;
}
學習筆記 c 強制型別轉換
型別轉換的含義是通過改變乙個變數的型別為別的型別從而改變該變數的表示方式。為 了型別轉換乙個簡單物件為另乙個物件你會使用傳統的型別轉換操作符。c 風格的強制型別轉換,不管什麼是什麼型別,統統都是 type b type a c 風格的型別轉換提供了4 種型別轉換操作符來應對不同場合的的應用。定義這幾...
boost中型別轉換學習
型別轉換在很多時候需要使用上,方便且安全的轉換是很有必要的。從c語言的一些api到c 中提供的stringstream流都有很多方式可以實現,了解他們的特點可以讓我們在日常編碼中編寫出漂亮的 一 c語言中常用的型別轉換 char szbuf 100 int nvalue 100000000 spri...
CSS變形轉換 學習筆記
css的變形轉換 屬性 transform 一 translate 位移 常用 該屬性值有三種型別 translatex translatey 和 translate。translate 可以作用於已經執行了 絕對定位 position absolute 的元素,而要用 position 已經設定為...