C 四個顯式資料型別轉換函式

2021-05-09 05:32:28 字數 2265 閱讀 2060

1 reinterpret_cast(在編譯期間實現轉換)

reinterpret_cast型別轉換函式將乙個型別的指標轉換成另乙個型別的指標。這種轉換不用於修改指標變數值資料存放的格式(不改變指標變數值),只需在編譯期間重新解釋指標的型別就可以做到。 

reinterpret_cast可以將指標值轉換為乙個整型數。但是不能用於非指標型別的轉換,否則將不會通過編譯。

什麼時候使用reinterpret_cast進行資料型別的轉換: 

(1)將基本型別指標轉換成另乙個型別的指標。

例如:

基本型別指標的轉換

double d = 9.3;

double *pd = &d;

int *pi = reinterpret_cast(pd);//相當於隱式轉換int * pi = (int *)pd;

(2)將乙個類的指標轉換為另乙個類的指標。

類指標型別的轉換:

class a{};

class b{};

a* pa = new a;

b* = reinterpret_ castpa;

(3)不能轉換非指標型別

例如:

將int型別轉換為float型別時是不能夠轉換成功的

int i = 8;

double dl = reinterpret_cast(i);

(4)不能將乙個const指標轉換成void*型別的指標

const int* pci = 0;

void *pv = reinterpret_cast(pci);

2 const_cast(在編譯期間實現轉換) 

const_cast用於去除指標變數的常量屬性,將它轉換為乙個對應指標型別的普通變數,反過來,也可以將乙個非常量的指標變數轉換為常量指標變數。這種轉換是在編譯期間作出的型別更改。 

(1)將常量指標變數轉換為對應指標型別的普通變數

const int *pci = 0;

int* pj = const_cast(pci);//相當於隱式轉換int* pj = (int*)pci; 

(2)將普通指標變數轉換為乙個常指標變數 

int* pi =0;

const int* pcj = const_cast(pi);//相當於隱式轉換const int* = (int*)pi 

(3)將類的常指標變數轉換為類的普通指標變數

const a* pca = new a;

a* pa = const_cast(pca);//相當於隱式轉換a* pa = (a*)pca; 

(4)無法將非指標的常變數轉換為普通變數,無法將非指標的普通變數轉換為常變數。

int i =0;

const int cj = const_cast(i);//非指標轉換,不能通過編譯

(5)但可以通過隱式轉換將非指標的普通變數轉換為常變數。

int i = 0;

const int ck = (const int)(i); 

3 stactic_cast(在編譯期間實現轉換) 

stactic_cast主要用於基本型別之間和具有繼承關係的型別之間的轉換,這種轉換一般會改變變數的內部表示方式,因此static_cast用於指標的轉換沒有太大的意義。即使允許指標型別的轉換,也不及reinterprret轉換的效率高。 

(1)基本型別之間的轉換

int i =0 ;

double d = static_cast(); 

(2)繼承型別轉換為基類

class base{};

class derived :public base{};

derived d;

base b = static_cast(d); 

(3)繼承類與基類指標進行轉換編譯能通過,但是基類轉換為繼承類指標具有一定的危害性

dereived* pd = new derived ;

base *pb = static_cast(pd); 

(4)不能使用static_cast轉換基本型別的指標

int* pi = 0;

double* pd = static_cast(pi);

(5)不能把基類轉換為繼承類或轉換無繼承關係的類的指標 

4 dynamic_cast(在執行期間實現轉換,並可以返回轉換成功與否的標誌)

javaScript資料型別轉換 顯式轉換(一)

1 轉換為 布林型別 boolean mix 函式 undefined false null false 字串型別 空字串 false 非空字串 true 數值型 0 false,nan false,非 0 true 總結 false 0 nan null undefined 會被轉換為 false...

C 顯式型別轉換

對於型別轉換,我在查資料的時候看到了一種很有意思的解釋,我們可以這樣理解型別轉換 某塊記憶體中的資料是不變的,而型別就是我們戴上的眼鏡,當我們戴上一種眼鏡後,我們就會用對應的型別來解釋記憶體中的資料,這樣不同的解釋就得到了不同的資訊。所謂強制型別轉換實際上就是換上另一副眼鏡後再來看同樣的那塊記憶體資...

c 顯式型別轉換

乙個命名的強制型別轉換具有以下形式 cast name expression 其中,type是轉換的目標型別,而expression是要轉換的值。如果type是引用型別,則結果是左值。cast name是static cast dynamic cast const cast reinterpret ...