C++的類型轉換分為隱式轉換和顯式轉換
隱式轉換舉例:
int i=4;
double ?d=i;//隱式轉換
顯式轉換分為四種:reinterpret_cast,static_cast,const_cast,dynamic_cast
一、reinterpret_cast
主要用途:指針重新解釋,可以用于簡單類型指針之間、無繼承關系的類指針,也可以將指針解釋為簡單類型。
例如:
1、簡單類型指針之間轉換
int i=0;
int *pi = &i;
double *pd = reinterpret_cast<double *> (pi);
2、無繼承關系的類指針之間
classA ?cA = new classA();
classA *pcA = &cA;
classB *pcB = reinterpret_cast<classB *> (pcA);
3、指針解釋為簡單類型
long ?ld = reinterpret_cast<long > pi;
二、static_cast
主要用途:簡單類型轉換,具有繼承關系的對象之間轉換
1、簡單類型轉換
long ld=10;
int i =static_cast<int> (ld);
2、具有繼承關系的對象之間轉換
class A{};
class B:public A{};
B b;
A a = static_cast<A> (b);
三、const_cast
主要用途:去掉/增加指針變量的const屬性
四、dynamic_cast
主要用途:用于運行時類型檢查,比如一個用基類指針或引用表示的對象,有可能是基類對象,也有可能是繼承類對象,通過dynamic_cast進行轉換,根據轉換結果可判斷實際類型,然后再進行進一步操作。