【C++】类型转换简述:四种类型转换方式的说明及应用
本文主要簡述在C++中四種類型轉換的方式:static_cast、reniterpret_cast、const_cast和dynamic_cast.
在介紹C++類型轉換方式之前,我們先來看看C語言的類型轉換.
在C語言中,類型轉換非常容易,我們想將int a轉換為char a只需:(char)a即可,簡單方便!
簡單方便的同時也存在一些缺陷:
1.C語言中的類型轉換太過于“籠統”,它可以使任意類型進行相互轉換,而不同類型轉換之間的差別是巨大的,但C語言卻并沒有做出明確的區分.
2.C語言的類型轉換不易于查找,龐大的代碼中,我們想找某種特定的類型轉換宛如大海撈針.
因此,C++提供了四種類型轉換的機制,分別為static_cast、reniterpret_cast、const_cast和dynamic_cast.
static_cast
static_cast,從字面上來理解就是"靜態轉換".
它是最常用的類型轉換符,主要用于內置數據類型之間的相互轉換,在編譯期間進行處理.如:
int a = 10; char b = (char)a; //c風格轉換 char c = static_cast<char>(a); //c++風格轉換?const_cast
const_cast,從字面上來看就知道是"const類型轉換"的.
它可以將const變量轉換為非const屬性,或者,將非const變量轉換為const變量.不能用于不同類型變量轉換!!!如:
const int a = 10; int b = (int)a; //C語言類型轉換 int c = const_cast<int>(a); //C++類型轉換dynamic_cast
dynamic_cast,從字面上來理解"動態類型轉換".
它用于派生類與基類之間的轉換(主要將基類指針或引用轉換為派生類指針或引用),轉換時會進行類型安全檢查.如:
Base *pBase = new Base(); Derive *pDerive = dynamic_cast<Derive*>(pBase);注:
1.它不能進行不同類型變量的轉換.
2.dynamic_cast只能用于含有虛函數的類.
3.dynamic_cast會先檢查是否能轉換成功,能成功則轉換,不能則返回0.
reinterpret_cast
從字面上來理解reinterpret_cast,其含義為"重新解釋轉型".
它與C語言中的強制轉換具有相同功能,它可以用于內置類型的相互轉換,也可以將內置類型轉換為其他類型,其機理是"對二進制進行重新解釋",不會改變之前的格式.
int a = 0x0018ff44;int* b = static_cast<int*>(a); //編譯失敗! int* c = reinterpret_cast<int*>(a); //編譯成功!
轉載于:https://www.cnblogs.com/qq329914874/p/6806034.html
總結
以上是生活随笔為你收集整理的【C++】类型转换简述:四种类型转换方式的说明及应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查个人征信 去各地央行的征信中心进行
- 下一篇: 首卡下了多久办第二张