C++ 補充 & C++ 11 - C++ 類型轉換簡介

C++ 類型轉換簡介

1.1 C++類型轉換詳解

舊式轉型 C風格的強制類型:

TYPE b = (TYPE) a     
例如:  
int i = 48;
char c = (char) i;

新式轉型C++風格的類型轉換提供了4種類型轉換操作符來應對不同場合的應用。

格式:
	    TYPE b = 類型操作符<TYPE> ( a )   
       類型操作符= static_cast | reinterpreter_cast | dynamic_cast | const_cast 

1.2 static_cast

靜態類型轉換(斯文的勸導,溫柔的轉換)。如int轉換成char
主要用法:

用於類層次結構中基類(父類)和派生類(子類)之間指針或引用的轉換。上行指針或引用(派生類到基類)轉換安全,下行不安全

用於基本數據類型之間的轉換,如把int轉換成char,把int轉換成enum。這種轉換的安全性也要開發人員來保證。

把空指針轉換成目標類型的空指針。

把任何類型的表達式轉換成void類型。

demo 代碼(一)

#include <iostream>

using namespace std;

void dothing(void* arg)
{
	int* int_arg = (int*)arg;
}

struct dog_
{
	int age;
};

int main(void)
{
	double PI = 3.1415926;

	int i = PI; /* 隱式轉換 */
	int i1 = (int)PI; /* 強制類型轉換,把double轉換爲int */
	int i2 = static_cast<int>(PI);

	// struct dog_* dp = static_cast<struct dog_*>(&PI); NO! 

	int* addr = (int*)0x888888; /* 強制類型轉換,整數直接變指針。*/
	// int* addr1 = static_cast<int*>(0x888888); /* 會報錯 */
	int* addr2 = reinterpret_cast<int*>(0x888888);

	system("pause");
	return 0;
}

編譯執行:

reinterpret_cast

重新解釋類型(掛羊頭,賣狗肉) 不同類型間的互轉,數值與指針間的互轉

用法: TYPE b = reinterpret_cast ( a )
TYPE必須是一個指針、引用、算術類型、函數指針.

忠告:濫用 reinterpret_cast 運算符可能很容易帶來風險。 除非所需轉換本身是低級別的,否則應使用其他強制轉換運算符之一。

結語:

時間:2020-07-01

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