關(guān)于cpp的強(qiáng)制類型轉(zhuǎn)換總結(jié)

關(guān)于cpp的強(qiáng)制類型轉(zhuǎn)換總結(jié)

ID:35298165

大?。?7.14 KB

頁(yè)數(shù):5頁(yè)

時(shí)間:2019-03-23

關(guān)于cpp的強(qiáng)制類型轉(zhuǎn)換總結(jié)_第1頁(yè)
關(guān)于cpp的強(qiáng)制類型轉(zhuǎn)換總結(jié)_第2頁(yè)
關(guān)于cpp的強(qiáng)制類型轉(zhuǎn)換總結(jié)_第3頁(yè)
關(guān)于cpp的強(qiáng)制類型轉(zhuǎn)換總結(jié)_第4頁(yè)
關(guān)于cpp的強(qiáng)制類型轉(zhuǎn)換總結(jié)_第5頁(yè)
資源描述:

《關(guān)于cpp的強(qiáng)制類型轉(zhuǎn)換總結(jié)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、關(guān)于C++的強(qiáng)制類型轉(zhuǎn)換以下內(nèi)容整理自互聯(lián)網(wǎng)。整理人:LybeLiu文中教材指的是《C++語(yǔ)言程序設(shè)計(jì)》(第4版),作者是鄭莉等,清華大學(xué)出版社會(huì)出版。教材上提到這4種轉(zhuǎn)換的地方分別是:P36(概述),P244(reinterpret_cast),P246(const_cast),P337顯式轉(zhuǎn)換也被稱為強(qiáng)制類型轉(zhuǎn)換(cast),包括下列命名的強(qiáng)制類型轉(zhuǎn)換操作符static_castdynamic_castconst_cast和reinterpret_cast。static_cast、const_cast和reinterpret_cast三種類型轉(zhuǎn)換操作符的功能,

2、都可以用標(biāo)準(zhǔn)C++之前的兩種類型轉(zhuǎn)換語(yǔ)法來(lái)描述。之所以細(xì)分,是為了“語(yǔ)義更加明確,也就不容易出錯(cuò)”。static_cast它用來(lái)進(jìn)行比較安全的、基于內(nèi)容的數(shù)據(jù)類型轉(zhuǎn)換(編譯器會(huì)生成代碼進(jìn)行轉(zhuǎn)換)?;緮?shù)據(jù)類型之間的轉(zhuǎn)換都適用于static_cast。用法:static_cast(exdivssion)該運(yùn)算符把exdivssion轉(zhuǎn)換為type-id類型,但沒(méi)有運(yùn)行時(shí)類型檢查來(lái)保證轉(zhuǎn)換的安全性。它主要有如下幾種用法:①用于類層次結(jié)構(gòu)中基類和子類之間指針或引用的轉(zhuǎn)換。進(jìn)行上行轉(zhuǎn)換(把子類的指針或引用轉(zhuǎn)換成基類表示)是安全的;進(jìn)行下行轉(zhuǎn)換(把基類指針

3、或引用轉(zhuǎn)換成子類表示)時(shí),由于沒(méi)有動(dòng)態(tài)類型檢查,所以是不安全的。②用于基本數(shù)據(jù)類型之間的轉(zhuǎn)換,如把int轉(zhuǎn)換成char,把int轉(zhuǎn)換成enum。這種轉(zhuǎn)換的安全性也要開(kāi)發(fā)人員來(lái)保證。③把空指針轉(zhuǎn)換成目標(biāo)類型的空指針。④把任何類型的表達(dá)式轉(zhuǎn)換成void類型。注意:static_cast不能轉(zhuǎn)換掉exdivssion的const、volatile、或者_(dá)_unaligned屬性。例子:classB{...};classD:publicB{...};voidf(B*pb,D*pd){D*pd2=static_cast(pb);//不安全,pb可能只是B的指針B*p

4、b2=static_cast(pd);//安全的...}reinterpret_cast任何指針都可以轉(zhuǎn)換成其它類型的指針,T必須是一個(gè)指針、引用、算術(shù)類型、指向函數(shù)的指針或指向一個(gè)類成員的指針。表達(dá)式reinterpret_cast(a)能夠用于諸如char*到int*,或者One_class*到Unrelated_class*等類似這樣的轉(zhuǎn)換,因此可能是不安全的。例子:classA{...};classB{...};voidf(){??A*pa=newA;??void*pv=reinterpret_cast(pa);??//pv現(xiàn)在指向了

5、一個(gè)類型為B的對(duì)象,這可能是不安全的??...}reinterpre_cast通常對(duì)于操作數(shù)的位模式執(zhí)行一個(gè)比較低層次的重新解釋,它的正確性很大程度上依賴于程序員的主動(dòng)管理。Areinterpret_castgenerallyperformsalow-levelreinterpretationofthebitpatternofitsoperands,anditscorrectnessinlargepartdependsontheactivemanagementoftheprogrammer.const_cast將數(shù)據(jù)類型中的const屬性去除。表達(dá)式const_c

6、ast(a)被用于從一個(gè)類中去除以下這些屬性:const,volatile,和__unaligned。例子1:voidfoo(constint*cp){int*p=const_cast(cp);//轉(zhuǎn)換以后通過(guò)得到的指針修改cp指向的常量。(*p)++;}例子2:classA{...};voidf(){constA*pa=newA;//const對(duì)象A*pb;//非const對(duì)象//pb=pa;//這里將出錯(cuò),不能將const對(duì)象指針賦值給非const對(duì)象pb=const_cast(pa);//現(xiàn)在OK了...}dynamic_cast通

7、常在基類和派生類之間轉(zhuǎn)換時(shí)使用,是run-timecast。dynamic_cast支持在運(yùn)行時(shí)刻識(shí)別由指針或引用指向的類對(duì)象(Thedynamic_castsupportstherun-timeidentificationofclassobjectsaddressedeitherbyapointerorreference.)轉(zhuǎn)換前類型必須是指向多態(tài)類型的指針(即要有虛函數(shù)),或多態(tài)類型的引用,否則編譯會(huì)出錯(cuò)。這是由于運(yùn)行時(shí)類型檢查需要運(yùn)行時(shí)類型信息,而這個(gè)信息存儲(chǔ)在類的虛函數(shù)表。用法:dynamic_cast(a)該運(yùn)算符把a(bǔ)轉(zhuǎn)換成T類型的對(duì)象。T必須是類

8、的指針、類

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。