C++中的typeid關鍵字
用以返回一個變數或資料型別的“型別”。
用法如下:
cout<<typeid(int).name()<<endl;
int a;
cout<<typeid(a).name()<<endl;
輸出如下:
int
int
如果有類A,且有虛擬函式,類B,C,D都是從類A派生的,且都重定義了類A中的虛擬函式,這時有類A的指標p,再把物件類B的物件的地址賦給指標p,則typeid(p).name()將返回的型別將是A*, 因為這裡的p表示的是一個指標, 該指標是型別為A的指標, 所以返回A*, 而typeid(*p).name()將返回B,因為指標p是指向類B的物件的,而*p就表示的是類B的物件的型別,所以返回B。
比如有類 A,其中定義有虛擬函式,而類B,C,D都是從類A派生而來的且重定義了該虛擬函式,這時有個類A的指標p和p1,按照虛擬函式的原理,基類的指標可以指向任何派生類的物件,在這時就有可能需要比較兩個指標是否指向同一個物件,這時就可以這樣使用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)的話,則無論指標p和p1指向的什麼派生類物件,他們都是相等的,因為都是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開關。
(原文地址: http://blog.csdn.net/goodlixueyong/article/details/6244303)
相關文章
- C++ typeid關鍵字詳解C++
- C++中的 const 關鍵字C++
- explicit關鍵字【C++】C++
- C++關鍵字decltypeC++
- 詳解C++的模板中typename關鍵字的用法C++
- 【轉】C++ static關鍵字C++
- c/c++ const關鍵字C++
- C++ 62個關鍵字的作用C++
- C++ explicit&noexcept關鍵字C++
- 【C++】requires關鍵字簡介C++UI
- C++ 的關鍵字(保留字)完整介紹C++
- C++關鍵字(持續更新ing)C++
- java中的static關鍵字Java
- mysql 中的explain關鍵字MySqlAI
- java中的instanceof關鍵字Java
- java中this關鍵字Java
- Java中transient關鍵字的作用Java
- java中static關鍵字的作用Java
- 在Java中this關鍵字的使用Java
- Java中的各種關鍵字Java
- 完全理解JavaScript中的this關鍵字JavaScript
- 說說iOS中的常用的關鍵字static ,class(僅限Swift關鍵字)iOSSwift
- const關鍵字在C與C++中修飾變數的區別C++變數
- Java中final關鍵字Java
- scala中yield關鍵字
- typescript 中的 infer 關鍵字的理解TypeScript
- DM 關鍵字、遮蔽關鍵字
- out關鍵字和ref關鍵字的區別
- c++ typeid().name()輸出變數型別C++變數型別
- java中的static和final關鍵字Java
- 搜尋Oracle DDL中的關鍵字Oracle
- let關鍵字和const關鍵字
- final關鍵字和static關鍵字
- Java中this與super關鍵字Java
- js中new關鍵字的使用過程JS
- 深入理解Java中的volatile關鍵字Java
- PHP中static與yield關鍵字的思考PHP
- 揭祕JavaScript中“神祕”的this關鍵字JavaScript
- 看懂js中this關鍵字的指向問題JS