1.static_case強制類型轉換
> 用於基本類型間的轉換,但不能用於基本類型指針間的轉換
> 用於有繼承關係類對象之間的轉換和類指針之間的轉換
如:
int main()
{
int i = 0;
char c = 'c';
int * pi = &i;
char* pc = &c;
c = static_cast<char>(i); //可以正常轉換
pc = static_cast<char *>(pi); //不能正常轉換,編譯會報錯
return 0;
}
2.reinterpret_cast強制類型轉換
> 用於指針類型間的類型轉換
> 用於整數和指針類型間的強制轉換
如:
typedef void(PF)(int);
int main()
{
int i = 0;
char c = 'c';
int *pi = reinterpret_cast<int *>(&c); //可以成功轉換
char *pc = reinterpret_cast<char *>(&i); //可以成功轉換
PF* pf = reinterpret_cast<PF*>(0x12345678); //可以成功轉換
c = reinterpret_cast<char>(i); //轉換失敗,編譯不通過
return 0;
}
reinterpret_cast直接從二進制位進行復制,是一種極其危險的強制轉換。
3.dynamic_cast強制類型轉換
> 主要用於類層次間的轉換,還可以用於類之間的交叉轉換
> 具有類型檢查的功能,比static_cast更安全
4.const_cast強制類型轉換
> 用於去除變量的const屬性
如:
int main()
{
const int& j = 1;
int& k = const_cast<int&>(j); //可以賦值
const int x = 2;
int& y = const_cast<int&>(x); //可以賦值
k = 5;
printf(" j = %d\n",j);
printf(" k = %d\n",k);
y = 3;
printf(" x = %d\n",x);
printf(" y = %d\n",y);
printf(" &x = %p\n",&x);
printf(" &y = %p\n",&y);
return 0;
}
運行結果爲: