国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】dynamic_cast 進(jìn)行類型轉(zhuǎn)換步驟以及底層實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了【C++】dynamic_cast 進(jìn)行類型轉(zhuǎn)換步驟以及底層實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

簡(jiǎn)要說(shuō)明 dynamic_cast

dynamic_cast 是 C++ 中的一種類型轉(zhuǎn)換方式,它可以在運(yùn)行時(shí)進(jìn)行類型檢查,用于將一個(gè)指針或引用強(qiáng)制轉(zhuǎn)換為另一個(gè)類型的指針或引用。dynamic_cast 能夠進(jìn)行安全的向下轉(zhuǎn)型,即將一個(gè)基類指針或引用轉(zhuǎn)換為派生類指針或引用。如果轉(zhuǎn)換成功,dynamic_cast 返回轉(zhuǎn)換后的指針或引用;否則,返回 NULL(對(duì)于指針)或拋出 std::bad_cast 異常(對(duì)于引用)。

dynamic_cast 進(jìn)行類型轉(zhuǎn)換步驟以及底層實(shí)現(xiàn)

dynamic_cast 的底層實(shí)現(xiàn)通常是通過(guò)在對(duì)象中存儲(chǔ)一些額外的信息來(lái)實(shí)現(xiàn)的,這些信息包括對(duì)象的類型信息以及指向虛函數(shù)表(vtable)的指針。在進(jìn)行 dynamic_cast 轉(zhuǎn)換時(shí),編譯器會(huì)利用這些信息進(jìn)行類型檢查和轉(zhuǎn)換。

dynamic_cast 轉(zhuǎn)換的步驟:

  1. ** 檢查源指針或引用是否為 NULL**,如果是,直接返回 NULL 或拋出 std::bad_cast 異常。

  2. 檢查目標(biāo)類型是否與源類型兼容,如果不兼容,直接返回 NULL 或拋出 std::bad_cast 異常。在向下轉(zhuǎn)型時(shí),目標(biāo)類型必須是派生類類型的指針或引用;在向上轉(zhuǎn)型時(shí),目標(biāo)類型必須是基類類型的指針或引用。

  3. 進(jìn)行類型轉(zhuǎn)換。在向下轉(zhuǎn)型時(shí),編譯器會(huì)利用對(duì)象的類型信息和虛函數(shù)表指針來(lái)計(jì)算出派生類對(duì)象的地址;在向上轉(zhuǎn)型時(shí),編譯器會(huì)直接將派生類對(duì)象的地址轉(zhuǎn)換為基類對(duì)象的地址。

  4. 檢查轉(zhuǎn)換結(jié)果是否有效,如果無(wú)效,返回 NULL 或拋出 std::bad_cast 異常。例如,在向下轉(zhuǎn)型時(shí),如果源指針或引用指向的對(duì)象不是目標(biāo)類型的對(duì)象,或者源指針或引用不是指向多態(tài)類型的指針或引用,轉(zhuǎn)換就是無(wú)效的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-425253.html

到了這里,關(guān)于【C++】dynamic_cast 進(jìn)行類型轉(zhuǎn)換步驟以及底層實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C++】dynamic_cast基本用法(詳細(xì)講解)

    【C++】dynamic_cast基本用法(詳細(xì)講解)

    ??博__主??:米碼收割機(jī) ??技__能??:C++/Python語(yǔ)言 ??公眾號(hào)??:測(cè)試開(kāi)發(fā)自動(dòng)化【獲取源碼+商業(yè)合作】 ??榮__譽(yù)??:阿里云博客專家博主、51CTO技術(shù)博主 ??專__注??:專注主流機(jī)器人、人工智能等相關(guān)領(lǐng)域的開(kāi)發(fā)、測(cè)試技術(shù)。 dynamic_cast 是 C++ 中的一個(gè)類型轉(zhuǎn)換操作符

    2024年02月07日
    瀏覽(20)
  • static_cast與dynamic_cast到底是什么?

    寫(xiě)這個(gè)隨筆說(shuō)一下C++的static_cast和dynamic_cast用在子類與父類的指針轉(zhuǎn)換時(shí)的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉(zhuǎn)子類、用 static_cast 子類轉(zhuǎn)父類、使用 dynamic_cast 父類轉(zhuǎn)子類、用 dynamic_cast 子類轉(zhuǎn)父類

    2024年04月24日
    瀏覽(24)
  • c++ 11 新特性 不同數(shù)據(jù)類型之間轉(zhuǎn)換函數(shù)之reinterpret_cast

    c++ 11 新特性 不同數(shù)據(jù)類型之間轉(zhuǎn)換函數(shù)之reinterpret_cast

    一.不同數(shù)據(jù)類型之間轉(zhuǎn)換函數(shù) reinterpret_cast 介紹 reinterpret_cast 是C++中的一種類型轉(zhuǎn)換操作符,用于執(zhí)行低級(jí)別的位模式轉(zhuǎn)換。具體來(lái)說(shuō), reinterpret_cast 可以實(shí)現(xiàn)以下功能: 指針和整數(shù)之間的轉(zhuǎn)換 :這種轉(zhuǎn)換通常用于在指針中存儲(chǔ)額外信息,或者在特定平臺(tái)上進(jìn)行底層操作。

    2024年03月09日
    瀏覽(30)
  • c++ 之 dynamic_pointer_cast

    /* ?* dynamic_pointer_cast ?*/ ?? ?描述 (Description) ?? ??? ?它返回一個(gè)正確類型的sp副本,其存儲(chǔ)的指針從U *動(dòng)態(tài)地轉(zhuǎn)換為T(mén) *。 ?? ?聲明 (Declaration) ?? ??? ?以下是std :: dynamic_pointer_cast的聲明。 ?? ??? ?template class T, class U ?? ??? ?? shared_ptrT dynamic_pointer_cast (const shared_

    2024年02月15日
    瀏覽(10)
  • C++中使用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換

    可給類提供重載的構(gòu)造函數(shù),即接受一個(gè)或多個(gè)參數(shù)的構(gòu)造函數(shù)。這種構(gòu)造函數(shù)常用于進(jìn)行類型轉(zhuǎn)換。請(qǐng)看下面的 Human 類,它包含一個(gè)將整數(shù)作為參數(shù)的重構(gòu)構(gòu)造函數(shù): 這個(gè)構(gòu)造函數(shù)讓您能夠執(zhí)行下面的轉(zhuǎn)換: 這樣的轉(zhuǎn)換構(gòu)造函數(shù)讓您能夠執(zhí)行隱式轉(zhuǎn)換: 函數(shù) DoSothing(Hum

    2024年02月04日
    瀏覽(17)
  • 【C++高階(九)】C++類型轉(zhuǎn)換以及IO流

    【C++高階(九)】C++類型轉(zhuǎn)換以及IO流

    ??博主CSDN主頁(yè):杭電碼農(nóng)-NEO?? ? ?專欄分類:C++從入門(mén)到精通? ? ??代碼倉(cāng)庫(kù):NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你學(xué)習(xí)C++ ? ???? C語(yǔ)言中常見(jiàn)的類型轉(zhuǎn)換有隱式類型 轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換,但是在面向?qū)ο蟮?語(yǔ)言中,這樣使用未免太不優(yōu)雅了! 本章重點(diǎn): 本篇文章前半截著重講

    2024年02月04日
    瀏覽(16)
  • (04)基礎(chǔ)強(qiáng)化:接口,類型轉(zhuǎn)換cast/convert,異常處理,傳參params/ref/out,判斷同一對(duì)象

    (04)基礎(chǔ)強(qiáng)化:接口,類型轉(zhuǎn)換cast/convert,異常處理,傳參params/ref/out,判斷同一對(duì)象

    ?? ? 1、New的截?cái)嗍侵甘裁矗??? ? ?? ??? ?new除了新開(kāi)空間創(chuàng)建初始化對(duì)象外,還有一個(gè) 隱藏 父類同名方法的作用。 ?? ??? ? ?? ??? ?當(dāng)子類想要隱藏父類同名的方法時(shí)用new,用了new后父類同名方法將到此為止,后面 ?? ??? ?繼承的子類,將再也繼承不到父類的同

    2024年02月01日
    瀏覽(15)
  • 【Qt】使用Qt designer(Qt設(shè)計(jì)師)以及uic工具將ui文件轉(zhuǎn)換到C++代碼進(jìn)行界面開(kāi)發(fā)

    【Qt】使用Qt designer(Qt設(shè)計(jì)師)以及uic工具將ui文件轉(zhuǎn)換到C++代碼進(jìn)行界面開(kāi)發(fā)

    【Qt】編寫(xiě)第一個(gè)Qt程序,使用Cmake編譯并運(yùn)行 Qt Designer是一個(gè)用于創(chuàng)建Qt應(yīng)用程序用戶界面的圖形化界面設(shè)計(jì)器。它是Python GUI開(kāi)發(fā)的一個(gè)重要工具,可以幫助用戶快速創(chuàng)建具有豐富功能的用戶界面。 打開(kāi)終端輸入以下代碼 點(diǎn)擊創(chuàng)建 拖一些組件進(jìn)來(lái),點(diǎn)擊保存 得到一個(gè)后綴為

    2024年02月16日
    瀏覽(29)
  • 【Kotlin】類的繼承 ② ( 使用 is 運(yùn)算符進(jìn)行類型檢測(cè) | 使用 as 運(yùn)算符進(jìn)行類型轉(zhuǎn)換 | 智能類型轉(zhuǎn)換 | Any 超類 )

    【Kotlin】類的繼承 ② ( 使用 is 運(yùn)算符進(jìn)行類型檢測(cè) | 使用 as 運(yùn)算符進(jìn)行類型轉(zhuǎn)換 | 智能類型轉(zhuǎn)換 | Any 超類 )

    在 Kotlin 中 , 如果不確定一個(gè) 實(shí)例對(duì)象的類型 , 可以 使用 is 運(yùn)算符進(jìn)行判定 , 使用方法 上述用法可以判定 實(shí)例對(duì)象 是否是 判定類型 , 如果是 返回 true , 反之 返回 false ; 代碼示例 : 在下面的代碼中 , 調(diào)用 student is Person 判斷 student 對(duì)象是否是 Person 類型 ; 執(zhí)行結(jié)果 : 將 子類

    2024年02月03日
    瀏覽(36)
  • 關(guān)于C或C++,數(shù)組的強(qiáng)制類型轉(zhuǎn)換,uint8_t與char的區(qū)別,uint8_t*與char*的兼容性問(wèn)題以及一些指針的常見(jiàn)問(wèn)題

    關(guān)于C或C++,數(shù)組的強(qiáng)制類型轉(zhuǎn)換,uint8_t與char的區(qū)別,uint8_t*與char*的兼容性問(wèn)題以及一些指針的常見(jiàn)問(wèn)題

    1.類型定義: uint8_t:這是一個(gè)無(wú)符號(hào) 8 位整數(shù)類型,定義在 stdint.h 或 inttypes.h 頭文件中。它是標(biāo)準(zhǔn)的固定寬度整數(shù)類型之一,確保在所有平臺(tái)上占用 8 位(1 字節(jié))。 char:這是 C 語(yǔ)言的基本字符存儲(chǔ)類型,用于存儲(chǔ)單個(gè)字符。在不同的系統(tǒng)和編譯器中,char 可以是有符號(hào)的

    2024年01月24日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包