程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++的四個顯式的數據類型轉換函數

C++的四個顯式的數據類型轉換函數

編輯:關於C++

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

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

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

什麼時候使用reinterpret_cast進行數據類型的轉換:

(1)將基本類型指針轉換成另一個類型的指針。

例如:

基本類型指針的轉換

double d = 9.3;
double *pd = &d;
int *pi = reinterpret_cast<int *>(pd);//相當於隱式轉換int * pi = (int *)pd;

(2)將一個類的指針轉換為另一個類的指針。

類指針類型的轉換:

class A{};
class B{};
A* pa = new A;
B* = reinterpret_ cast<B*>pa;

(3)不能轉換非指針類型

例如:

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

int i = 8;

double dl = reinterpret_cast<double>(i);

(4)不能將一個const指針轉換成void*類型的指針

const int* pci = 0;

void *pv = reinterpret_cast<void*>(pci);

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

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

(1)將常量指針變量轉換為對應指針類型的普通變量

const int *pci = 0;

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

(2)將普通指針變量轉換為一個常指針變量

int* pi =0;

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

(3)將類的常指針變量轉換為類的普通指針變量

const A* pca = new A;

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

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

int i =0;

const int cj = const_cast<const int>(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<double int>();

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

class Base{};
class Derived :public Base{};
Derived d;
Base b = static_cast<Base>(d);

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

Dereived* pd = new Derived ;

Base *pb = static_cast<Base*>(pd);

(4)不能使用static_cast轉換基本類型的指針

int* pi = 0;

double* pd = static_cast<double>(pi);

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved