国产中文字幕在线视频,.com久久久,亚洲免费在线播放视频,神九影院电视剧免费观看,奇米在线888,天天网综合,久久免费视频观看

昆明建站網(wǎng)站資訊平臺(tái)個(gè)人購(gòu)物網(wǎng)站 怎么建

鶴壁市浩天電氣有限公司 2026/01/22 09:02:06
昆明建站網(wǎng)站資訊平臺(tái),個(gè)人購(gòu)物網(wǎng)站 怎么建,wordpress cdn優(yōu)化,百度競(jìng)價(jià)專員目錄 c的類型轉(zhuǎn)換 1. C語(yǔ)言中的類型轉(zhuǎn)換 2. 為什么c需要四種類型轉(zhuǎn)換 3. c強(qiáng)制類型轉(zhuǎn)換解析 3.1 static_cast 3.2 reinterpret_cast 3.3 const_cast 3.4 dynamic_cast 4. RTTI c的類型轉(zhuǎn)換 c語(yǔ)言和c是一個(gè)強(qiáng)類型的語(yǔ)言#xff0c;也就是變量和變量之間有明顯的類型的…目錄c的類型轉(zhuǎn)換1. C語(yǔ)言中的類型轉(zhuǎn)換2. 為什么c需要四種類型轉(zhuǎn)換3. c強(qiáng)制類型轉(zhuǎn)換解析3.1 static_cast3.2 reinterpret_cast3.3 const_cast3.4 dynamic_cast4. RTTIc的類型轉(zhuǎn)換c語(yǔ)言和c是一個(gè)強(qiáng)類型的語(yǔ)言也就是變量和變量之間有明顯的類型的區(qū)分1. C語(yǔ)言中的類型轉(zhuǎn)換在C語(yǔ)言中如果賦值運(yùn)算符左右兩側(cè)類型不同或者形參與實(shí)參類型不匹配或者返回值類型與接收返回值類型不一致時(shí)就需要發(fā)生類型轉(zhuǎn)化C語(yǔ)言中總共有兩種形式的類型轉(zhuǎn)換隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換。1. 隱式類型轉(zhuǎn)化編譯器在編譯階段自動(dòng)進(jìn)行能轉(zhuǎn)就轉(zhuǎn)不能轉(zhuǎn)就編譯失敗2. 顯式類型轉(zhuǎn)化需要用戶自己處理缺陷轉(zhuǎn)換的可視性比較差所有的轉(zhuǎn)換形式都是以一種相同的形式書寫難以跟蹤錯(cuò)誤轉(zhuǎn)換2. 為什么c需要四種類型轉(zhuǎn)換標(biāo)準(zhǔn)C為了加強(qiáng)類型轉(zhuǎn)換的可視性引入了四種命名的強(qiáng)制類型轉(zhuǎn)換操作符static_cast、reinterpret_cast、const_cast、dynamic_castC風(fēng)格的轉(zhuǎn)換格式很簡(jiǎn)單但是有不少缺點(diǎn)的1. 隱式類型轉(zhuǎn)化有些情況下可能會(huì)出問(wèn)題比如數(shù)據(jù)精度丟失2. 顯式類型轉(zhuǎn)換將所有情況混合在一起代碼不夠清晰因此C提出了自己的類型轉(zhuǎn)化風(fēng)格注意因?yàn)镃要兼容C語(yǔ)言所以C中還可以使用C語(yǔ)言的轉(zhuǎn)化風(fēng)格c兼容c語(yǔ)言留下來(lái)的隱式類型轉(zhuǎn)換和顯示轉(zhuǎn)換但是c覺(jué)得c語(yǔ)言做的不規(guī)范c想規(guī)范一下標(biāo)準(zhǔn)c為了加強(qiáng)類型的可視性引入了四種命名的強(qiáng)制類型轉(zhuǎn)換操作符3. c強(qiáng)制類型轉(zhuǎn)換解析3.1 static_cast對(duì)于c語(yǔ)言中的隱式類型轉(zhuǎn)換相近的類型就使用這個(gè)int i 1; double d 8.88; i static_castint(d); cout i endl;3.2 reinterpret_cast對(duì)于c語(yǔ)言中的強(qiáng)制類型轉(zhuǎn)換不相近的類型就用這個(gè)int i 1; double d 8.88; i static_castint(d); cout i endl; int* p nullptr; p reinterpret_castint*(i); cout p endl;總結(jié)如果你不相近的類型使用了static_cast就不可以如果相近的類型使用了reinterpret_cast也不可以總之c是為了實(shí)現(xiàn)你一看用哪個(gè)cast就知道但注意你并沒(méi)有改變?cè)瓉?lái)變量的類型也就是d還是8.88還是double類型3.3 const_castconst_cast就是去除const屬性的const int ci 10; int* pi const_castint*(ci); *pi 20; cout *pi endl; cout ci endl;這種情況是未定義行為原變量是const修飾的但是經(jīng)你這么修改原變量本來(lái)是const但是可以通過(guò)指針來(lái)修改這種是不合法的結(jié)果是未定義的// 可能的結(jié)果 // 1. 程序崩潰 // 2. 輸出 ci 仍為 10編譯器優(yōu)化a 被存儲(chǔ)在只讀內(nèi)存/寄存器 // 3. 輸出 ci為 20極少數(shù)未優(yōu)化場(chǎng)景。我的編譯器優(yōu)化之后ci仍然為10原因可以看到通過(guò)調(diào)試已經(jīng)修改了變量的值但是為什么打印ci是10這是是去寄存器當(dāng)中找的就是因?yàn)槟阍瓉?lái)是const對(duì)象它認(rèn)為你是不可能修改的所以放到寄存器當(dāng)中這樣速度快但是你這里修改的是內(nèi)存當(dāng)中的值ci當(dāng)中內(nèi)存是變20了然后打印的時(shí)候由于ci寄存器有直接就拿了本質(zhì)是由于編譯器對(duì)const對(duì)象存取優(yōu)化機(jī)制導(dǎo)致的甚至有些直接優(yōu)化成常量10了為了避免編譯器優(yōu)化可以通過(guò)加volatile關(guān)鍵字讓編譯器每次都到內(nèi)存當(dāng)中取volatile const int ci10;但是一般不要這么編寫本來(lái)好好的const常量被你修改了之后能變一般都是const指針或者const引用去除const屬性只有這種場(chǎng)景是合法的3.4 dynamic_cast用于多態(tài)類型的轉(zhuǎn)換c中子類對(duì)象可以賦值給父類的對(duì)象、指針、引用、這個(gè)過(guò)程是語(yǔ)法天然支持的可以成功https://blog.csdn.net/Laydya/article/details/148145002dynamic_cast用于將一個(gè)父類對(duì)象的指針/引用轉(zhuǎn)換為子類對(duì)象的指針或引用(動(dòng)態(tài)轉(zhuǎn)換)向上轉(zhuǎn)型子類對(duì)象指針/引用-父類指針/引用(不需要轉(zhuǎn)換賦值兼容規(guī)則) 向下轉(zhuǎn)型父類對(duì)象指針/引用-子類指針/引用(用dynamic_cast轉(zhuǎn)型是安全的)注意 1. dynamic_cast只能用于含有虛函數(shù)的類 2. dynamic_cast會(huì)先檢查是否能轉(zhuǎn)換成功能成功則轉(zhuǎn)換不能則返回0class A { public: virtual void f() {} int _a; }; class B :public A { public: int _b; }; void f_cast(A* pa) { //如果想要區(qū)分pa是指向父類還是子類對(duì)象 B* pb (B*)pa; pb-_a 1; pb-_b 2; } int main() { A a; B b; A* pa a; f_cast(pa); B* pb b; f_cast(pb); return 0; }這里強(qiáng)制類型轉(zhuǎn)換了之后其實(shí)就是這個(gè)pb指針能看到的東西更多了也就是指針的意義就是根據(jù)類型能夠看到多大的空間由于你原來(lái)是A的類型但是你這里強(qiáng)制類型轉(zhuǎn)換成b了所以看到的東西變多了然后你pb- _b 就會(huì)越界訪問(wèn)如果你本身就是一個(gè)子類對(duì)象那就沒(méi)問(wèn)題因?yàn)槟惚旧砭涂梢钥吹竭@么多東西class A { public: virtual void f() {} int _a; }; class B :public A { public: int _b; }; void f_cast(A* pa) { //如果想要區(qū)分pa是指向父類還是子類對(duì)象 B* pb dynamic_castB*(pa); if (pb ! nullptr) { cout 轉(zhuǎn)換成功 endl; pb-_a 1; pb-_b 2; } else { cout 轉(zhuǎn)換失敗 endl; } } int main() { A a; B b; A* pa a; f_cast(pa); B* pb b; f_cast(pb); return 0; }使用dynamic_cast如果pa是指向子類對(duì)象則轉(zhuǎn)換成功反之如果是父類對(duì)象則轉(zhuǎn)換失敗注意只能針對(duì)繼承中的多態(tài)類型父類必須包含虛函數(shù)如果你把A里面的虛函數(shù)去掉那就編譯不過(guò)去了原理dynamic_cast通過(guò)去虛表的上方存儲(chǔ)的標(biāo)識(shí)信息來(lái)判斷指向父類對(duì)象還是子類對(duì)象如果沒(méi)有虛函數(shù)則沒(méi)有虛表就無(wú)法判斷了總結(jié)盡量少用類型轉(zhuǎn)換如果要用就用規(guī)范一些讓別人一看到就知道你在干嘛4. RTTIRTTIRun-Time Type Information運(yùn)行時(shí)類型信息是 C 提供的在程序運(yùn)行階段獲取對(duì)象 / 指針實(shí)際類型信息的機(jī)制核心作用是打破編譯期的類型綁定讓程序在運(yùn)行時(shí)識(shí)別多態(tài)類型比如基類指針指向的派生類對(duì)象的真實(shí)類型。C 標(biāo)準(zhǔn)中RTTI 的支持是可選的但主流編譯器如 GCC/Clang/MSVC 均默認(rèn)開啟且僅對(duì)帶有虛函數(shù)的類多態(tài)類能正確返回動(dòng)態(tài)類型非多態(tài)類的 RTTI 僅能返回編譯期類型。C通過(guò)以下方式來(lái)支持RTTI1.typeid運(yùn)算符typeid運(yùn)算符返回std::type_info對(duì)象包含類型的名稱、哈希值等信息可用于比較兩個(gè)對(duì)象 / 指針的實(shí)際類型是否相同獲取類型的名稱注意名稱格式由編譯器決定不一定是類的原名。只有多態(tài)才能返回指向的類型如果沒(méi)有多態(tài)返回的是編譯期類型基類而非實(shí)際指向的派生類2.dynamic_cast運(yùn)算符這個(gè)上面已經(jīng)做了詳細(xì)的講解也就是通過(guò)運(yùn)行時(shí)的類型確定的運(yùn)行起來(lái)后通過(guò)查虛表虛表里面有標(biāo)識(shí)來(lái)辨別實(shí)際類型僅僅針對(duì)多態(tài)
版權(quán)聲明: 本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)聯(lián)系我們進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

浙江省建設(shè)廳網(wǎng)站如何查安全員公司網(wǎng)站建設(shè)的定位語(yǔ)要怎么取

浙江省建設(shè)廳網(wǎng)站如何查安全員,公司網(wǎng)站建設(shè)的定位語(yǔ)要怎么取,手機(jī)電腦網(wǎng)站一站式,中國(guó)電影家協(xié)會(huì)會(huì)員【精選優(yōu)質(zhì)專欄推薦】 《AI 技術(shù)前沿》 —— 緊跟 AI 最新趨勢(shì)與應(yīng)用《網(wǎng)絡(luò)安全新手快速入門(附漏

2026/01/21 17:12:01

黑龍江最新通知今天南陽(yáng)seo

黑龍江最新通知今天,南陽(yáng)seo,沈陽(yáng)微信網(wǎng)站建設(shè),夜晚必備的直播軟件Wan2.2-T2V-A14B在法庭證據(jù)演示動(dòng)畫中的謹(jǐn)慎應(yīng)用建議 在一場(chǎng)復(fù)雜的刑事案件審理中#xff0c;陪審團(tuán)需要理解的可能不只是

2026/01/21 19:14:01

做騙子曝光網(wǎng)站是否違法黃驊港最新招聘

做騙子曝光網(wǎng)站是否違法,黃驊港最新招聘,做網(wǎng)站需要懂程序嗎,wordpress 安裝 重定向循環(huán)隨著生成式AI技術(shù)的快速發(fā)展#xff0c;尤其是ChatGPT、DeepSeek等AI平臺(tái)的普及#xff

2026/01/21 16:31:01

網(wǎng)站建設(shè)的行業(yè)app下載app開發(fā)公司

網(wǎng)站建設(shè)的行業(yè),app下載app開發(fā)公司,甘肅做網(wǎng)站的公司,wordpress制作小工具在畢業(yè)論文季#xff0c;高效完成開題報(bào)告和論文是很多學(xué)子的痛點(diǎn)。人工寫作雖然靈活#xff0c;但耗時(shí)耗力#xf

2026/01/21 19:16:01