1. 程式人生 > >c++中的各種型別轉換

c++中的各種型別轉換

const_cast
去掉const屬性

const int base = 1;
//int *b = &base ; //編譯錯誤
int *b = const_cast<int *>(&base) ; 

dynamic_cast
只能用於指標和引用的轉換,
可以將父類指標轉換成對應的子類指標,但是在向下轉換的時候父類一定要有虛擬函式,否則會編譯錯誤,
如果是轉換失敗,指標的轉換會返回null,引用的轉換會丟擲異常。

class base {
public:
    base();
    virtual ~base();//父類需要有虛擬函式
};

class
derive : public base { public: }; void dynamic_cast_test() { base *a = new base ; derive *b = dynamic_cast<derive *>(a);//如果轉換失敗返回NULL }

static_cast
可以實現基本型別之間的相互轉換,
可以實現空型別指標到其他型別指標的轉換,
可以實現子類和父類之間的互相轉換,
可以實現任何型別轉換成void型別。

reinterpret_cast
可以實現不相關型別的轉換,簡單的實現二進位制的拷貝,並不作任何型別檢查,
所以類似於int轉向double的情況,就會出問題,因為只是簡單的將4個位元組的二進位制轉換給double,而並不滿足double的二進位制儲存方式,
在自己的編譯器測試,編譯不通過

 int aa = 1;
 int *a = &aa;
 double *b = reinterpret_cast<double *>(a) ;//這樣得到的結果並不是1,而是將整數型的二進位制使用浮點型格式解釋