精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

研究了一波RTTI,你會(huì)了嗎

開(kāi)發(fā) 前端
RTTI 是 Run Time Type Information 的縮寫(xiě),從字面上來(lái)理解就是運(yùn)行時(shí)期的類(lèi)型信息,它的主要作用就是動(dòng)態(tài)判斷運(yùn)行時(shí)期的類(lèi)型。

最近研究了一波RTTI,整理了一下知識(shí)點(diǎn),在這里分享一下,下面是目錄:

RTTI 是 Run Time Type Information 的縮寫(xiě),從字面上來(lái)理解就是運(yùn)行時(shí)期的類(lèi)型信息,它的主要作用就是動(dòng)態(tài)判斷運(yùn)行時(shí)期的類(lèi)型。

一般在dynamic_cast和typeid中用到,例如父類(lèi)B的指針轉(zhuǎn)換子類(lèi)A的指針,dynamic_cast會(huì)判斷B究竟是不是A的父類(lèi),如果不是,會(huì)返回nullptr,相對(duì)于強(qiáng)轉(zhuǎn)會(huì)更加安全。依據(jù)什么判斷的呢?就是RTTI。

先看下面這段代碼:

  1. #include <iostream> 
  2. using std::cout; 
  3. using std::endl; 
  4. class Base 
  5. public
  6.     int a; 
  7.     int b; 
  8.     Base() 
  9.     { 
  10.         cout << this << " Base \n"
  11.     } 
  12.     virtual void func() 
  13.         cout << this << " hello Base \n"
  14.     }; 
  15.     void basefunc() 
  16.         cout << this << " hello basefunc \n"
  17.     } 
  18. }; 
  19. class BaseBB 
  20. public
  21.     int d; 
  22.     int c; 
  23.     BaseBB() 
  24.     { 
  25.         cout << this << " BaseBB \n"
  26.     } 
  27.     virtual void func() 
  28.         cout << this << " hello BaseBB \n"
  29.     } 
  30. }; 
  31. class Derive : public Base 
  32. public
  33.     Derive() 
  34.     { 
  35.         cout << this << " Derive \n"
  36.     } 
  37.     void func() override 
  38.         cout << this << " hello Derive \n"
  39.     } 
  40. }; 
  41. int main() 
  42.     Derive *d = new Derive; 
  43.     typeid(d); 
  44.     d->func(); 
  45.     Base *b = static_cast<Base *>(d); 
  46.     b->func(); 
  47.     b->basefunc(); 
  48.     Derive *b1 = dynamic_cast<Derive *>(b); 
  49.     Derive *b2 = static_cast<Derive *>(b); 
  50.     b1->func(); 
  51.     b2->func(); 
  52.     BaseBB *b3 = dynamic_cast<BaseBB *>(b); 
  53.     BaseBB *b4 = reinterpret_cast<BaseBB *>(b); 
  54.     cout << d << " " << b << " " << b1 << " " << b2 << " " << b3 << " " << b4 << endl; 
  55.     return 0; 

結(jié)果如下:

  1. clang++ test_rtti.cc -std=c++11;./a.out 
  2.  
  3. 0x7fe80ac05920 Base  
  4. 0x7fe80ac05920 Derive  
  5. 0x7fe80ac05920 hello Derive  
  6. 0x7fe80ac05920 hello Derive  
  7. 0x7fe80ac05920 hello basefunc  
  8. 0x7fe80ac05920 hello Derive  
  9. 0x7fe80ac05920 hello Derive  
  10. 0x7fe80ac05920 0x7fe80ac05920 0x7fe80ac05920 0x7fe80ac05920 0x0 0x7fe80ac05920 

上面的代碼是正常的一段使用多態(tài)的代碼,同時(shí)也包含了子類(lèi)指針轉(zhuǎn)基類(lèi)指針,基類(lèi)指針轉(zhuǎn)子類(lèi)指針,從輸出結(jié)果中可以看到,使用dynamic_cast進(jìn)行不合理的基類(lèi)子類(lèi)指針轉(zhuǎn)換時(shí),會(huì)返回nullptr,而強(qiáng)轉(zhuǎn)則不會(huì)返回nullptr,運(yùn)行時(shí)肯定就會(huì)出現(xiàn)奇奇怪怪的錯(cuò)誤,比較難排查。

如果在編譯時(shí)加上-fno-rtti會(huì)怎么樣?結(jié)果是這樣:

  1. clang++ test_rtti.cc -std=c++11 -fno-rtti 
  2.  
  3. test_rtti.cc:60:5: error: use of typeid requires -frtti 
  4.     typeid(d); 
  5.     ^ 
  6. test_rtti.cc:65:18: error: use of dynamic_cast requires -frtti 
  7.     Derive *b1 = dynamic_cast<Derive *>(b); 
  8.                  ^ 
  9. test_rtti.cc:69:18: error: use of dynamic_cast requires -frtti 
  10.     BaseBB *b3 = dynamic_cast<BaseBB *>(b); 
  11.                  ^ 
  12. 3 errors generated. 

可以看到,加上了-fno-rtti編譯時(shí),使用typeid或dynamic_cast會(huì)報(bào)錯(cuò),即添加-fno-rtti編譯會(huì)禁止我們使用dynamic_cast和typeid。那為什么要禁止使用他們呢?

1. RTTI的空間成本非常高:每個(gè)帶有vtable(至少一個(gè)虛擬方法)的類(lèi)都將獲得RTTI信息,其中包括類(lèi)的名稱(chēng)及其基類(lèi)的信息。此信息用于實(shí)現(xiàn)typeid運(yùn)算符以及dynamic_cast。(大小問(wèn)題大家可以自己編寫(xiě)代碼驗(yàn)證一下)

2. 速度慢,運(yùn)行時(shí)多判斷了一層,性能肯定更慢一些。

tips:我這里又將typeid和dynamic_cast去掉重新編譯,結(jié)果表明添加了-fno-rtti,還是可以正常使用多態(tài),所以大家不用擔(dān)心rtti的禁用會(huì)影響多態(tài)的使用。

都知道RTTI信息是存在于虛函數(shù)表中,而添加-fno-rtti后代表禁止了RTTI,那虛函數(shù)表中還會(huì)有rtti信息嗎?

我這里使用clang的命令查看一下虛函數(shù)表:

  1. clang -Xclang -fdump-vtable-layouts -stdlib=libc++ -fno-rtti -c test_rtti.cc 
  2.  
  3. test_rtti.cc:51:17: warning: 'override' keyword is a C++11 extension [-Wc++11-extensions] 
  4.     void func() override 
  5.                 ^ 
  6. Original map 
  7.  void Derive::func() -> void Base::func() 
  8. Vtable for 'Derive' (3 entries). 
  9.    0 | offset_to_top (0) 
  10.    1 | Derive RTTI 
  11.        -- (Base, 0) vtable address -- 
  12.        -- (Derive, 0) vtable address -- 
  13.    2 | void Derive::func() 
  14.  
  15. VTable indices for 'Derive' (1 entries). 
  16.    0 | void Derive::func() 

通過(guò)結(jié)果可以看到,即使添加了-fno-rtti,虛函數(shù)表中還是會(huì)存在RTTI指針,但是我查看很多文檔都說(shuō)rtti會(huì)導(dǎo)致可執(zhí)行文件的體積增大一些(畢竟-fno-rtti最大的目的就是為了減小代碼和可執(zhí)行文件的大小),所以我估計(jì)指針指向的塊里面可能什么信息都沒(méi)有,具體就不得而知了。

 

責(zé)任編輯:武曉燕 來(lái)源: 程序喵大人
相關(guān)推薦

2022-04-19 08:28:34

main函數(shù)

2022-12-07 10:17:32

WindowsANSI

2021-11-08 12:44:48

AndroidC++內(nèi)存

2021-01-01 09:03:44

故障HAProxy服務(wù)器

2024-01-19 08:25:38

死鎖Java通信

2022-04-01 08:23:17

InputstreString字符串

2023-07-26 13:11:21

ChatGPT平臺(tái)工具

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-01-10 08:43:15

定義DDD架構(gòu)

2023-08-01 12:51:18

WebGPT機(jī)器學(xué)習(xí)模型

2024-01-02 12:05:26

Java并發(fā)編程

2023-03-10 22:08:20

2014-07-17 09:05:29

2023-01-30 09:01:54

圖表指南圖形化

2022-05-06 08:26:32

JavaSPI機(jī)制

2024-05-06 00:00:00

InnoDBView隔離

2024-08-06 09:47:57

2022-07-08 09:27:48

CSSIFC模型

2021-10-31 20:07:49

Windows驅(qū)動(dòng)開(kāi)發(fā)

2023-10-10 11:04:11

Rust難點(diǎn)內(nèi)存
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产不卡视频在线| 亚洲精品综合久久中文字幕| 日本道在线视频| 亚洲精品成av人片天堂无码 | 在线电影中文日韩| 99中文字幕在线| missav|免费高清av在线看| 久久久午夜精品| 成人午夜在线视频一区| 91蜜桃视频在线观看| 成人精品电影| 亚洲成人精品视频| www.com操| 色偷偷偷亚洲综合网另类| 美女黄色一级视频| 久久不卡日韩美女| 亚洲成人av中文| 亚洲成人在线视频网站| 亚洲欧美另类一区| 蜜臀久久99精品久久久久宅男| 久久久久久999| 国产视频123区| 日韩免费电影在线观看| 91麻豆精品国产91久久久久| 日韩精品一区二区三区久久| www.久久久久.com| 国产女人aaa级久久久级 | 黑森林精品导航| xxxx在线视频| 亚洲黄色尤物视频| 亚洲韩国在线| 精品推荐蜜桃传媒| 成人免费电影视频| 91九色视频在线观看| 无码人妻aⅴ一区二区三区有奶水| 国产精品mm| 久久亚洲精品毛片| 麻豆一区在线观看| 日本电影一区二区| 亚洲人高潮女人毛茸茸| 51调教丨国产调教视频| 国内自拍欧美| 日韩精品中文字幕在线不卡尤物| 手机版av在线| 97精品国产综合久久久动漫日韩 | 这里只有精品视频在线| 香蕉网在线播放| 国产一区在线电影| 精品国产1区2区3区| 日韩av成人网| 97超碰成人| 日韩欧美一区二区三区在线| 亚洲最大天堂网| 久久久加勒比| 欧美日韩dvd在线观看| 日韩福利视频在线| 国精产品一区二区三区有限公司 | 日韩高清一区| 9191成人精品久久| 手机免费看av网站| 精品中文字幕一区二区三区四区| 欧美高清精品3d| 精品亚洲视频在线| 免费欧美网站| 亚洲精品一区二区三区精华液| 性折磨bdsm欧美激情另类| 日韩视频在线直播| 精品美女一区二区三区| 在线天堂www在线国语对白| 国产精品中文字幕制服诱惑| 日韩激情av在线免费观看| 漂亮人妻被黑人久久精品| 久久久久久毛片免费看 | 成人激情视频免费在线| 国产精品嫩草影院桃色| 国产精品一区二区在线观看不卡| 97伦理在线四区| 天天干天天爽天天操| 91免费在线看| 亚洲一区二区三区精品视频| 成年人网站在线| 一区二区三区美女| 国产黄页在线观看| 草莓视频成人appios| 欧美一区二区三区视频在线观看| 丰满少妇xbxb毛片日本| 亚洲大片精品免费| 色偷偷88888欧美精品久久久| www.av成人| 亚洲激情在线| 国产精品扒开腿爽爽爽视频| 国产精品无码久久久久成人app| 国产精品亚洲第一区在线暖暖韩国| 成人在线免费观看一区| 黄色网址在线播放| 一区二区三区在线视频观看58| 国产视频九色蝌蚪| 91嫩草国产线观看亚洲一区二区| 精品三级在线看| 精品人妻一区二区三区蜜桃视频| 羞羞色午夜精品一区二区三区| 97碰碰碰免费色视频| 又骚又黄的视频| 成人美女视频在线观看| 日韩欧美亚洲v片| 人人澡人人添人人爽一区二区| 色哟哟一区二区三区| 男人操女人下面视频| 精品中文一区| 欧美激情精品久久久久久蜜臀| 99久久久无码国产精品免费蜜柚| 国产精品亚洲午夜一区二区三区| 日本不卡在线观看| 在线播放蜜桃麻豆| 在线观看国产日韩| 国产精品一区二区人妻喷水| 久久在线电影| 日韩免费高清在线观看| 亚洲国产中文字幕在线| 欧美国产日韩在线观看| 香港三级韩国三级日本三级| 日韩一区二区三区精品| 一区二区三区亚洲| 国产成人精品一区二三区| 国产一区二区网址| 亚洲国产欧洲综合997久久 | 国产精品二区不卡| 国产97在线|亚洲| 蜜臀av中文字幕| 亚洲欧美日韩在线播放| 国产又大又黄又猛| 伊人久久大香线蕉| 性色av一区二区三区免费| a天堂在线观看视频| 欧美激情一区二区三区四区| 欧美 国产 日本| 欧美1区2区3区4区| 久久免费在线观看| 成人午夜免费在线观看| 亚洲乱码一区二区三区在线观看| 污视频网站观看| 红桃成人av在线播放| 欧美一性一乱一交一视频| 丰满熟妇乱又伦| 亚洲夂夂婷婷色拍ww47| 成人高清在线观看视频| 性xxxx欧美老肥妇牲乱| 成人久久一区二区| 日本高清中文字幕在线| 精品视频一区 二区 三区| 男人舔女人下部高潮全视频| 老司机一区二区三区| 快播日韩欧美| 日本综合字幕| 永久免费毛片在线播放不卡| 进去里视频在线观看| 国产午夜精品久久| 搡女人真爽免费午夜网站| 激情综合网站| 国产精品视频免费观看www| 在线观看免费黄色| 欧美二区乱c少妇| 欧美黑人性猛交xxx| 国产一区二区在线视频| 777久久精品一区二区三区无码| 香蕉成人app| 性色av香蕉一区二区| 日本黄在线观看| 欧美在线免费播放| 羞羞在线观看视频| 国产精品123| 久无码久无码av无码| 精品国产影院| 国产精品久久久av久久久| 一级毛片视频在线| 日韩欧美中文字幕一区| 久久久无码一区二区三区| 成人免费毛片a| 日本wwww视频| 99久久夜色精品国产亚洲96| 91免费版黄色| 校园春色亚洲| 日日骚久久av| 亚洲av无码乱码在线观看性色| 狠狠色噜噜狠狠狠狠97| 日本一二三不卡视频| 国产一区二区导航在线播放| www精品久久| 精品久久久久久久久久久aⅴ| 成人精品网站在线观看| a级片免费在线观看| 国产亚洲欧美一区| 精品国自产拍在线观看| 天天做天天摸天天爽国产一区| 成人在线手机视频| 国产成人精品免费在线| 欧美 国产 小说 另类| 久久精品亚洲人成影院 | 性欧美视频videos6一9| av在线电影免费观看| 日韩一区二区三区免费看 | 欧美三级电影一区二区三区| 欧美成va人片在线观看| 这里只有精品999| 亚洲一区视频在线观看视频| 变态另类ts人妖一区二区| 国产成人欧美日韩在线电影| 热久久精品免费视频| 激情婷婷久久| 一区二区日本| 亚洲免费专区| av蓝导航精品导航| 欧美成人黄色| 青草热久免费精品视频| 丁香花在线观看完整版电影| 久久精品影视伊人网| 视频在线不卡| 精品国产乱码久久久久久久久| 亚洲午夜在线播放| 欧美日韩综合视频| 久久久久亚洲av成人片| 亚洲特黄一级片| 69精品无码成人久久久久久| 成人晚上爱看视频| 日韩一级片播放| 国产日韩亚洲| 成人性免费视频| 欧美三级第一页| 一区二区视频国产| 国内黄色精品| 欧美日韩一区在线视频| 狠狠一区二区三区| 91免费在线观看网站| 一级欧美视频| 91精品久久久久久久久久久久久久| 无遮挡爽大片在线观看视频| 国内精品久久久久久影视8| 欧美性video| 欧美日韩国产成人在线观看| 黄色网在线播放| 色婷婷av一区二区三区在线观看 | 鲁一鲁一鲁一鲁一澡| 国内精品久久久久久久97牛牛 | 亚洲精品看片| 日韩精品一区二区在线视频| 天天做天天爱天天综合网2021| 日韩精品欧美专区| 欧美精品系列| 一区二区三区在线视频111| 日韩成人免费| 一区二区三区|亚洲午夜| 色中色综合网| 91成人在线视频观看| 亚洲一区欧美| av动漫在线免费观看| 欧美激情1区| 亚洲 欧美 综合 另类 中字| 亚洲高清网站| 无码专区aaaaaa免费视频| 一区二区三区成人精品| 日本免费不卡一区二区| 奶水喷射视频一区| 久久综合久久色| 美腿丝袜一区二区三区| 亚洲免费黄色网| 国产馆精品极品| 无码成人精品区在线观看| av电影天堂一区二区在线观看| 醉酒壮男gay强迫野外xx| 久久综合色天天久久综合图片| av网站免费在线看| 国产精品久久久久7777按摩| 久久久久久久麻豆| 亚洲精品国产品国语在线app| 久久精品国产av一区二区三区| 亚洲一区在线播放| 国产女主播喷水视频在线观看| 色国产精品一区在线观看| 一二三四区视频| 精品国产一区二区在线观看| 青青青草网站免费视频在线观看| 中日韩午夜理伦电影免费| 国产素人视频在线观看| 97在线看福利| 成人亚洲免费| 国产精品加勒比| 精品一区二区三| 欧美日韩中文字幕在线播放| 国产精品丝袜xxxxxxx| 一本色道久久亚洲综合精品蜜桃 | 日韩视频三区| 日日噜噜夜夜狠狠| 成人丝袜18视频在线观看| 成年人免费观看视频网站| 综合欧美亚洲日本| 五月婷婷亚洲综合| 在线不卡免费欧美| 天堂中文网在线| 日韩视频第一页| 蜜桃视频动漫在线播放| 国产在线播放不卡| 亚洲都市激情| 国内精品国产三级国产99| 视频在线观看一区| 亚洲免费观看在线| 国产精品女同一区二区三区| 亚欧洲精品在线视频| 欧美日韩精品三区| 四虎影院在线播放| 欧美成人中文字幕| 成人看片网页| 久久99精品久久久久久久久久| 天天超碰亚洲| 亚洲精品乱码久久久久久自慰| 粉嫩高潮美女一区二区三区 | 精品视频亚洲| 国产 福利 在线| 丁香激情综合五月| 免费黄色激情视频| 色久综合一二码| 图片区 小说区 区 亚洲五月| 麻豆国产精品va在线观看不卡| 美女福利一区二区| 国产精品久久久久久久久婷婷 | 国产精一区二区| 日韩亚洲不卡在线| 国产日韩专区| 亚洲图片欧美另类| 玉米视频成人免费看| 亚洲一区二区人妻| 中文字幕无线精品亚洲乱码一区| 老色鬼在线视频| 国产美女99p| 国产伊人精品| 岛国大片在线免费观看| 国产精品久久久久久户外露出 | 久久精品欧美| 激情久久一区| 大尺度在线观看| 一区二区三区av电影| 精品久久国产视频| 久久午夜a级毛片| 国产999精品在线观看| 一区二区高清视频| 蜜乳av一区二区| 黄色国产在线播放| 在线精品视频免费播放| 国产有码在线| 国产精品青草久久久久福利99| 国产不卡一二三区| jizz欧美激情18| 日本一区二区三级电影在线观看| 亚洲av无码不卡| 最近2019年手机中文字幕| 日韩久久99| 自拍偷拍亚洲色图欧美| 狠狠色狠狠色综合系列| 午夜三级在线观看| 日韩欧美视频在线| 欧美韩日亚洲| 久久精品久久精品国产大片| 美女诱惑黄网站一区| 手机看片福利视频| 欧美久久久久久蜜桃| 3d玉蒲团在线观看| 99re在线视频上| 一区二区激情| 谁有免费的黄色网址| 精品1区2区3区| 国产高清一区二区三区视频| 99蜜桃在线观看免费视频网站| 伊人成人在线视频| 亚洲专区区免费| 欧美日韩激情一区二区| 26uuu亚洲电影在线观看| 精品国产第一页| 日韩成人一级片| 日本在线一级片| 亚洲国产精品久久久久秋霞蜜臀| 亚洲一二三四| 吴梦梦av在线| 成人黄色777网| 日本丰满少妇做爰爽爽| 久久精品成人一区二区三区| 成人av动漫| 国产视频一区二区三区在线播放| 国产精品久久久久aaaa| 黄色av免费观看| 国产精品啪视频| 亚洲经典三级| 欧美a级片免费看| 日韩电影第一页| 高清不卡一区| 日本中文字幕片| 亚洲人被黑人高潮完整版| 五月天婷婷社区| 91深夜福利视频| 久久久综合网| 久草视频中文在线| 在线精品播放av|