精品欧美一区二区三区在线观看 _久久久久国色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)

亚洲狠狠爱一区二区三区| 一区在线视频| 91精品国产综合久久久久久久 | 日本在线播放一二三区| 久久精品视频网| 91视频国产精品| 日韩欧美一级视频| 99免费精品| 亚洲激情在线视频| 91精品视频国产| 欧美成人h版| 亚洲精品欧美专区| 日本午夜精品一区二区| jizz中国少妇| 三级精品在线观看| 久久免费少妇高潮久久精品99| 在线观看国产精品一区| 亚洲午夜精品| 欧美日韩国产精品自在自线| 青青草成人免费在线视频| 888av在线| 91丨porny丨国产入口| 成人信息集中地欧美| 久草手机在线视频| 激情视频一区| 久久久成人av| 九一在线免费观看| 啄木系列成人av电影| 精品少妇一区二区三区在线播放| 黄色三级视频在线| 在线免费三级电影网站| 亚洲国产欧美日韩另类综合 | 91精品久久久久久久久久久久| 亚洲**毛片| 欧美理论电影在线| 成人午夜激情av| 东京一区二区| 欧美午夜精品久久久久久久| 国产成人在线小视频| 免费在线观看黄| 国产精品免费视频网站| 青青草国产精品| 你懂的视频在线| 97久久人人超碰| 国内精品**久久毛片app| www.狠狠干| 高清久久久久久| 99久久伊人精品影院| 国产成人a人亚洲精品无码| 精品在线视频一区| 91精品久久久久久久久不口人| 国产免费a视频| 日韩av在线发布| 欧洲永久精品大片ww免费漫画| 日韩av女优在线观看| 亚洲精品影视| 欧美亚洲视频一区二区| 中文字幕一区二区人妻电影| 国产欧美成人| 国产www精品| 亚洲精品毛片一区二区三区| 日本网站在线观看一区二区三区| 国产精品69精品一区二区三区| 亚洲国产av一区二区三区| 丝袜国产日韩另类美女| 国产精品爽爽爽爽爽爽在线观看| 亚洲免费视频二区| 久久电影网电视剧免费观看| 91日本在线视频| 午夜免费福利视频| av亚洲产国偷v产偷v自拍| 欧美亚洲一级二级| av中文字幕在线| 亚洲人成网站影音先锋播放| www.射射射| 美女写真久久影院| 欧美日韩国产另类一区| 无码人妻一区二区三区精品视频 | 国产中文字幕精品| 91超碰在线电影| 午夜影院免费体验区| 欧美激情在线观看视频免费| 国产又黄又爽免费视频| 182在线视频观看| 色天使色偷偷av一区二区| 天天色综合天天色| 日韩一区免费| 一本色道久久88精品综合| 在线看的片片片免费| 日韩视频三区| 国产日韩精品综合网站| 偷拍精品一区二区三区| 国产精品萝li| www.av毛片| 欧美少妇激情| 亚洲国产三级网| 久久精品在线观看视频| 国产欧美大片| 亚洲在线一区二区| 国产日本在线视频| 亚洲一区二区影院| 香蕉视频999| 人人香蕉久久| 美女视频黄免费的亚洲男人天堂| 日韩精品久久久久久久酒店| 久久成人18免费观看| 狠狠色噜噜狠狠色综合久| 黄视频网站在线看| 色综合天天性综合| 稀缺小u女呦精品呦| 国产精品成人一区二区不卡| 亲爱的老师9免费观看全集电视剧| 国产精品无码在线播放| 久久久久久久久久电影| 野外做受又硬又粗又大视频√| 日韩美女在线| 国产香蕉97碰碰久久人人| 国产一级视频在线播放| 国产真实乱子伦精品视频| 日本一区二区三区视频在线播放| av小说在线播放| 91精品国产手机| 国产亚洲精品精品精品| 国产欧美一级| 国产一区二区三区四区五区加勒比| 免费在线视频欧美| 欧美优质美女网站| 日韩av在线看免费观看| 一区二区在线| 国产精品专区第二| 成年人在线视频| 色婷婷综合久久久久中文| 亚洲第一黄色网址| 在线日韩视频| 国产91一区二区三区| 麻豆传媒视频在线| 欧美日韩国产不卡| 美国美女黄色片| 青青草成人在线观看| 日本精品一区二区三区不卡无字幕| 国产99在线观看| 亚洲成色www8888| 伊人365影院| 成人精品免费看| 亚洲 自拍 另类小说综合图区| 日韩成人久久| 欧美激情一区二区三区在线视频观看| 国产精品久久久久久69| 亚洲色图第一区| 国产在线视频三区| 亚洲精品成人无限看| 91免费视频网站| 在线观看三级视频| 精品少妇一区二区三区日产乱码 | 精品久久久久久久久久久久| 一边摸一边做爽的视频17国产| 亚洲一级影院| 蜜桃传媒一区二区| 色婷婷综合久久久中字幕精品久久 | 一区二区三区在线观看动漫| 中文字幕乱码在线人视频| 精品69视频一区二区三区Q| 成人在线视频电影| 国产粉嫩在线观看| 日韩精品极品在线观看播放免费视频| 天天干天天干天天| 精品国产欧美日韩一区二区三区| av伦理在线| 亚洲精品五月天| 欧美人与性动交α欧美精品| 黄色在线成人| 欧美凹凸一区二区三区视频| 欧美福利在线播放| 丝袜美腿亚洲一区二区| 国产片在线播放| 国产麻豆精品久久| www.成人爱| 懂色av中文一区二区三区| 影音先锋欧美资源| 久久不卡日韩美女| 成年无码av片在线| 婷婷av一区二区三区| 日韩欧美精品中文字幕| 日本在线观看网址| 国产精品3区| 日韩的一区二区| 在线免费观看一区二区| 一区二区日韩av| 四虎国产精品成人免费入口| 精品一区二区三区不卡| 热草久综合在线| 午夜剧场成人观在线视频免费观看| 精品视频免费在线播放| 老汉色老汉首页av亚洲| 国产精品久久久av| 日日夜夜天天综合入口| 亚洲欧美中文日韩v在线观看| 日韩av片在线| 亚洲精品电影院| 亚洲精品在线视频免费观看| 免费成人深夜夜行网站| 18av在线视频| 久做在线视频免费观看| 老司机精品视频在线| 黄色免费高清视频| 亚洲小说图片| 51国偷自产一区二区三区 | 国产精品视频3p| 国产精品免费一区豆花| 波多野结衣免费观看| 在线成人精品视频| 欧美女同一区| 日韩精品福利在线| 性做久久久久久久久久| 黄色在线看片| 成人国产免费电影| 黄色小视频在线免费看| 国产精品.xx视频.xxtv| 日韩在线播放视频| 日本私人网站在线观看| 日韩欧美电影一二三| 伊人精品一区二区三区| 欧美成人嫩草网站| 91偷拍一区二区三区精品| 亚洲高清二区| 国产97在线观看| 男女免费观看在线爽爽爽视频| 一本一本久久a久久精品牛牛影视| 精品人妻伦一区二区三区久久| 欧美影院一区二区三区| 国产成人无码精品| 99热在线成人| 欧美精品一线| 精品国产一区二区三区久久久蜜月 | 国产aa精品| 国产精品黄视频| 亚洲深夜视频| 欧美日韩福利在线观看| 动漫美女无遮挡免费| 在线综合亚洲| www国产精品内射老熟女| 欧美三级视频| 超碰10000| 欧美福利网址| 台湾无码一区二区| 国产精品mm| 成人小视频在线观看免费| 欧美日韩99| 激情成人开心网| 激情综合在线| 精品少妇一区二区三区在线| 国产精品日本| 福利在线一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 能在线观看的av网站| 日韩精品1区2区3区| 999精品视频在线| 久久99精品久久久久婷婷| 亚洲精品mv在线观看| 经典一区二区三区| 国产5g成人5g天天爽| 国产suv精品一区二区883| 国产一线在线观看| 久久噜噜亚洲综合| 91麻豆制片厂| 一区二区三区加勒比av| 国产第一页在线播放| 欧美日韩色婷婷| 91麻豆精品在线| 91精品啪在线观看国产60岁| www五月婷婷| 国产视频丨精品|在线观看| avtt亚洲| 九色成人免费视频| 麻豆理论在线观看| 国产精品久久久久久久久男 | 在线观看av一区二区| 国产永久免费视频| 亚洲国产日韩欧美在线99| 狠狠色伊人亚洲综合网站l| 中文字幕日韩免费视频| 欧美videossex另类| 日韩女在线观看| 国产欧美日韩电影| 久久精品五月婷婷| 欧美超碰在线| 免费黄色福利视频| 激情五月播播久久久精品| 水蜜桃av无码| 亚洲婷婷在线视频| 国产精品久久久久久99| 7878成人国产在线观看| 天堂在线一二区| 日韩中文字幕国产| 超碰在线97国产| 国产裸体写真av一区二区| 鲁大师精品99久久久| 中文字幕99| 性高湖久久久久久久久| 亚洲一区二区中文字幕在线观看| 91在线云播放| 欧美国产在线看| 欧美亚洲综合网| 婷婷开心激情网| 九九精品在线视频| 成人国产精品入口免费视频| 国产精品swag| 国产精品99久久精品| 国产最新免费视频| 国产成人精品影视| 国产精品1区2区3区4区| 色综合天天综合网天天看片| 亚洲欧美另类一区| 日韩中文字幕国产| 精品成人av| 六十路精品视频| 9国产精品视频| 91精品人妻一区二区三区四区| 中文字幕中文字幕中文字幕亚洲无线| 在线观看亚洲天堂| 精品日韩成人av| av黄色在线| 成人午夜高潮视频| 成人久久综合| 爆乳熟妇一区二区三区霸乳| fc2成人免费人成在线观看播放 | 欧美丝袜丝交足nylons图片| 性感美女一级片| 97碰在线观看| aiai久久| 久久久久久久香蕉| 国产麻豆视频一区二区| 搜索黄色一级片| 91麻豆精品国产91久久久久久久久 | 国产日韩精品一区二区三区在线| 精品成人av一区二区在线播放| 亚洲精品一区二区三区99| 日本在线视频www鲁啊鲁| 亚洲sss综合天堂久久| 亚洲免费二区| 精品国产午夜福利在线观看| 18成人在线观看| 国产美女无遮挡永久免费| 日韩一区二区精品视频| 日韩五码电影| 日日噜噜夜夜狠狠久久丁香五月| 精品亚洲成a人在线观看| 久久嫩草捆绑紧缚| 欧美精品乱码久久久久久| 老司机午夜在线视频| 亚洲一区二区日本| 国产精品videosex极品| 精品人妻在线视频| 天天色天天操综合| 亚洲日本国产精品| 国产成人精品在线播放| 亚欧日韩另类中文欧美| 99久久国产宗和精品1上映| 中文字幕第一区综合| 国产又黄又大又粗的视频| 欧美成在线视频| 嫩草国产精品入口| 成年人在线看片| 中文字幕中文字幕一区二区| 99精品人妻无码专区在线视频区| 欧美二区在线播放| 欧美人妖视频| 欧美日韩在线观看不卡| 一区二区中文字幕在线| 国产91免费看| 日本午夜在线亚洲.国产| 菠萝蜜一区二区| 日批视频在线看| 精品福利在线看| av电影在线观看一区二区三区| 成人网页在线免费观看| 亚洲三级色网| 亚洲国产精品无码久久久久高潮| 日韩欧美一区视频| 日本在线免费中文字幕| 国产不卡一区二区在线观看| 日韩在线一二三区| 欧美日韩在线观看免费| 亚洲男人天堂2019| 亚洲精品tv| 18禁免费无码无遮挡不卡网站| 国产精品伦理在线| 黄频网站在线观看| 国产精品欧美一区二区| 亚洲网站视频| 国产亚洲精品熟女国产成人| 欧美一区二区成人| 欧美7777| 国产aaa免费视频| 国产精品福利av| 欧美日韩激情视频一区二区三区| 国产精品久久久久久超碰| 在线观看日韩av电影| 亚洲综合久久av一区二区三区| 日韩经典一区二区三区|