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