c++中的各種型別轉換
阿新 • • 發佈:2019-02-16
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,而是將整數型的二進位制使用浮點型格式解釋