dynamic_cast和static_cast dynamic-cast可以作為對(duì)象繼承之間的轉(zhuǎn)換?
dynamic-cast可以作為對(duì)象繼承之間的轉(zhuǎn)換?動(dòng)態(tài)uucast用于對(duì)象的指針和引用。當(dāng)它用于多態(tài)類(lèi)型轉(zhuǎn)換時(shí),允許隱式轉(zhuǎn)換和反向轉(zhuǎn)換操作。它類(lèi)似于靜態(tài)轉(zhuǎn)換,不同之處在于在相反的轉(zhuǎn)換過(guò)程中,動(dòng)態(tài)轉(zhuǎn)換
dynamic-cast可以作為對(duì)象繼承之間的轉(zhuǎn)換?
動(dòng)態(tài)uucast用于對(duì)象的指針和引用。當(dāng)它用于多態(tài)類(lèi)型轉(zhuǎn)換時(shí),
允許隱式轉(zhuǎn)換和反向轉(zhuǎn)換操作。它類(lèi)似于靜態(tài)轉(zhuǎn)換,不同之處在于在相反的轉(zhuǎn)換過(guò)程中,動(dòng)態(tài)轉(zhuǎn)換將檢查操作的有效性。如果返回的對(duì)象不是請(qǐng)求的有效完整對(duì)象,則返回null,否則返回有效對(duì)象。如果返回的對(duì)象是引用,將拋出一個(gè)錯(cuò)誤的類(lèi)型轉(zhuǎn)換異常
3.1 static ucast
用法:static ucast< type ID>(exdivsion)
此運(yùn)算符將exdivsion轉(zhuǎn)換為type ID,但沒(méi)有運(yùn)行時(shí)類(lèi)型檢查來(lái)確保轉(zhuǎn)換的安全性。主要有以下幾種用法:
1。用于類(lèi)層次結(jié)構(gòu)中基類(lèi)與子類(lèi)之間指針或引用的轉(zhuǎn)換。
執(zhí)行上行鏈路轉(zhuǎn)換是安全的(將子類(lèi)的指針或引用轉(zhuǎn)換為基類(lèi)表示)。
執(zhí)行下行鏈路轉(zhuǎn)換(將基類(lèi)的指針或引用轉(zhuǎn)換為子類(lèi)表示)時(shí)是不安全的,因?yàn)闆](méi)有動(dòng)態(tài)類(lèi)型檢查。
②用于基本數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換,如將int轉(zhuǎn)換為char和int轉(zhuǎn)換為enum。這種轉(zhuǎn)型的安全性應(yīng)該由開(kāi)發(fā)商來(lái)保證。
③將空指針轉(zhuǎn)換為目標(biāo)類(lèi)型的空指針。
④將任何類(lèi)型的表達(dá)式轉(zhuǎn)換為void。
注意:靜態(tài)uuucast不能轉(zhuǎn)換常量、voltae或uuuuuu未對(duì)齊屬性。
3.2 dynamic uucast
用法:dynamic ucast< type ID>(exdivsion)
此運(yùn)算符將exdivsion轉(zhuǎn)換為ID類(lèi)型的對(duì)象。type ID必須是指向類(lèi)的指針、對(duì)類(lèi)的引用或void*;
如果type ID是類(lèi)指針類(lèi)型,則exdivsion也必須是指針。如果type ID是引用,那么exdivsion也必須是引用。
動(dòng)態(tài)轉(zhuǎn)換主要用于類(lèi)級(jí)別之間的上轉(zhuǎn)換和下轉(zhuǎn)換,也可以用于類(lèi)之間的交叉轉(zhuǎn)換。
當(dāng)類(lèi)級(jí)別上轉(zhuǎn)換時(shí),動(dòng)態(tài)uucast和靜態(tài)uuu的效果相同;
在下行轉(zhuǎn)換時(shí),動(dòng)態(tài)uucast具有類(lèi)型檢查功能,比靜態(tài)uucast更安全。
dynamic_cast與static_cast的區(qū)別?
很多C源代碼,如果編譯器不能編譯通過(guò),提示不能使用指針強(qiáng)制轉(zhuǎn)換,那么你需要一個(gè)小的重新解釋uucast<type>,例如,一個(gè)簡(jiǎn)單的rswier/c4c4編譯器源代碼,這是一個(gè)C風(fēng)格的源代碼,你可以用這個(gè)東西。這個(gè)源代碼稍加修改,可以用G,vs(cpp文件)編譯,類(lèi)型轉(zhuǎn)換錯(cuò)誤可以很快解決。在arm和X86平臺(tái)上使用G編譯器可以編譯。當(dāng)您轉(zhuǎn)到MFC時(shí),您可以看到reinterpret When you create the source code(vs2017)ucast<hmode> to convert a type to a handle。然后mov deax、eax等等,然后重新解釋uucast<char*>,同樣的道理。類(lèi)似地,constucast、staticuucast、dynamicuucast和其他cast都有自己的場(chǎng)景。當(dāng)你需要了解這些東西的時(shí)候,你不會(huì)使用它們。