首先型別轉換,比如以下**
int i;
double d = 12.0;
i = (int)d;
但是這種強制轉換符對於類和類的指標來說,就比較麻煩,所以c++標準定義了四個新的轉換符:
轉換乙個指標為其他型別的指標,也允許乙個指標轉換為整數型別,反之亦然
#include
using
namespace
std;
class a
};class b
};int main()
執行結果如下:
允許任意的隱式轉換和相反轉換動作(即使它是不允許隱式的),比如類上,它允許這樣兩個操作:(1)子類型別的指標轉換為父類型別的指標(這個是有效的隱式轉換),(2)轉換父類的指標為子類指標(隱式操作是不允許的),當然也可以用在基礎型別轉換上,這裡與dynamic_cast做對比
#include
using
namespace
std;
class a
};class b:public a
};int main()
結果如下:
只能用於物件的指標和引用,用於多型的時候允許任意的隱式型別以及反轉過程(它這裡與static_cast不同的地方就值,在反轉過程的時候會檢查操作是否有效,無效返回null),具體**如下:
#include
using
namespace
std;
class a
};class b:public a
};int main()
if (b2 != null)
system("pause");
}
在實現的過程中,發現如果類沒有包含多型型別會報錯
說這個之前先說一下const物件的指標問題
const
int* p;
int a = 10;
p = &a;
//*p = 20; 不允許
a = 20;
這裡說的是p本身可以修改,但是p指向的內容不能通過p來修改
int c=20;
int *const p=&c;
而這樣定義,則是p本身是const,指向的內容可以修改。
簡單一句話來說,const在*後面就是指標本身是const,const在*前面就是指向的內容不允許通過指標修改
而const_cast就是改變這個性質,**如下
#include
using
namespace
std;
class a
void hello()
int aa;
};int main()
執行結果 C 中4種 型別轉換 方式
dynamic cast var reinterpret cast var static cast var const cast var 1 執行時,檢查轉換 2 基類中一定要有虛函式 不能用於基礎型別 否則編譯不通過 3 成功的話返回的是指向類的指標或引用,轉換失敗的話則會返回null 更多請檢視...
C 的4種型別轉換方式
型別轉換有c風格的,當然還有c 風格的。c風格的轉換的格式很簡單 type expression,但是c風格的型別轉換有不少的缺點,有的時候用c風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把乙個指向const物件的指標轉換成指向非const物件的指標,把乙個指向基類物件的指標轉換成...
比較C 中的4種型別轉換方式
ansi c 標準定義了四個新的轉換符 reinterpret cast static cast dynamic cast 和 const cast 目的在於控制類 class 之間的型別轉換。reinterpret cast expression dynamic cast expression s...