??博客主頁: 主頁
??系列專欄: C++
??感謝大家點(diǎn)贊??收藏?評論??
??期待與大家一起進(jìn)步!
C語言中的類型轉(zhuǎn)換
- 隱式類型轉(zhuǎn)化:編譯器在編譯階段自動(dòng)進(jìn)行,能轉(zhuǎn)就轉(zhuǎn),不能轉(zhuǎn)就編譯失敗
- 顯式類型轉(zhuǎn)化:需要用戶自己處理
缺陷:
轉(zhuǎn)換的可視性比較差,所有的轉(zhuǎn)換形式都是以一種相同形式書寫,難以跟蹤錯(cuò)誤的轉(zhuǎn)換
標(biāo)準(zhǔn)C++為了加強(qiáng)類型轉(zhuǎn)換的可視性,引入了四種命名的強(qiáng)制類型轉(zhuǎn)換操作符:
static_cast、reinterpret_cast、const_cast、dynamic_cast
一、static_cast
static_cast用于非多態(tài)類型的轉(zhuǎn)換(靜態(tài)轉(zhuǎn)換),編譯器隱式執(zhí)行的任何類型轉(zhuǎn)換都可用static_cast,但它不能用于兩個(gè)不相關(guān)的類型進(jìn)行轉(zhuǎn)換。
int main()
{
double d = 12.34;
int a = static_cast<int>(d);
cout<<a<<endl;
return 0;
}
二、reinterpret_cast
reinterpret_cast操作符通常為操作數(shù)的位模式提供較低層次的重新解釋,用于將一種類型轉(zhuǎn)換為另一種不同的類型
int main()
{
double d = 12.34;
int a = static_cast<int>(d);
cout << a << endl;
// 這里使用static_cast會(huì)報(bào)錯(cuò),應(yīng)該使用reinterpret_cast
//int *p = static_cast<int*>(a);
int *p = reinterpret_cast<int*>(a);
return 0;
}
三、 const_cast
const_cast最常用的用途就是刪除變量的const屬性,方便賦值
但這里我們發(fā)現(xiàn)打印出來a的值沒有加一,這是因?yàn)榫幾g器對于const類型修飾的常變量默認(rèn)其值是不會(huì)被修改的,為了加快訪問效率,編譯器會(huì)把常變量的值放入寄存器,每次從寄存器中去讀取數(shù)據(jù),其實(shí)實(shí)際在內(nèi)存中對應(yīng)的值是變了的了。
四、 dynamic_cast
dynamic_cast用于將一個(gè)父類對象的指針/引用轉(zhuǎn)換為子類對象的指針或引用(動(dòng)態(tài)轉(zhuǎn)換)
向上轉(zhuǎn)型:子類對象指針/引用->父類指針/引用(不需要轉(zhuǎn)換,賦值兼容規(guī)則)
向下轉(zhuǎn)型:父類對象指針/引用->子類指針/引用(用dynamic_cast轉(zhuǎn)型是安全的)注意:文章來源:http://www.zghlxwxcb.cn/news/detail-729877.html
- dynamic_cast只能用于父類含有虛函數(shù)的類
- dynamic_cast會(huì)先檢查是否能轉(zhuǎn)換成功,能成功則轉(zhuǎn)換,不能則返回0
文章來源地址http://www.zghlxwxcb.cn/news/detail-729877.html
到了這里,關(guān)于【C++】類型轉(zhuǎn)換(dynamic_cast,const_cast,static_cast,reinterpret_cast)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!