C++四種強制類型轉換總結

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;
}

運行結果爲:

                                 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章