日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ TypeId简介与使用

發布時間:2025/1/21 c/c++ 102 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ TypeId简介与使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 簡介

TypeId?返回一個變量或數據類型的“類型”。


  • 使用場景

用法如下:

????cout<<typeid(int).name()<<endl;????int?a;cout<<typeid(a).name()<<endl;

輸出如下:

int

int


  • 注意事項

如果有類A,且有虛函數,類BCD都是從類A派生的,且都重定義了類A中的虛函數,這時有類A的指針p,再把對象類B的對象的地址賦給指針p,則typeid(p).name()將返回的類型將是A*?因為這里的p表示的是一個指針,該指針是類型為A的指針,?所以返回A*?typeid(*p).name()將返回B,因為指針p是指向類B的對象的,而*p就表示的是類B的對象的類型,所以返回B

比如有類?A,其中定義有虛函數,而類BCD都是從類A派生而來的且重定義了該虛函數,這時有個類A的指針pp1,按照虛函數的原理,基類的指針可以指向任何派生類的對象,在這時就有可能需要比較兩個指針是否指向同一個對象,這時就可以這樣使用typeid了,typeid(*p)= =typeid(*p1);這里要注意的是typeid(*p)typeid(p)是指的不同的對象類型,typeid(p)表示的是p的類型,在這里p是一個指針,這個指針指向的是類A的對象,所以p的類型是A*?typeid(*p)則不一樣,?*p表示的是指針p實際所指的對象的類型?比如這里的指針p指向派生類B,則typeid(*p)的類型為B。所以在測試兩個指針的類型是否是相等時應使用*p,即typeid(*p)= =typeid(*p1)。如果是typeid(p)= =typeid(p1)的話,則無論指針pp1指向的什么派生類對象,他們都是相等的,因為都是A *的類型。

?

  • 相關文獻和資料

?? ?關于typeid的錯誤(warning C4541: 'typeid' used on polymorphic type 'class A' with /GR-; unpredictable behavior may result)

????解決方法:在vc6. Project - settings... - C/C++?,在Category那里選?C++ Language,再在下邊勾上?Enable Run-Time Type Information[RTTI]。這樣再運行程序的時候就不會有錯誤了。

????????RTTI(運行時類型信息)會帶來額外的開銷,大部分編譯器都支持RTTI,但在默認情況下關閉此功能,需要用上面的方法打開RTTI開關。


轉載于:https://blog.51cto.com/844133395/1883243

總結

以上是生活随笔為你收集整理的C++ TypeId简介与使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。