当前位置:编程学习 > C/C++ >>

第18章 特殊工具与技术(7)

18.2.2 typeid操作符

如果表达式的类型是类类型且该类包含一个或多个虚函数,则表达式的动态类型可能不同于它的静态编译时类型。例如,如果表达式对基类指针解引用,则该表达式的静态编译时类型是基类类型;但是指针实际指向派生类对象,则typeid操作符将说表达式的类型是派生类型。

typeid操作符可以与任何类型的表达式一起使用。内置类型的表达式以及常量都可以用作typeid操作符的操作数。如果操作数不是类类型或者是没有虚函数的类,则typeid操作符指出操作数的静态类型;如果操作数是定义了至少一个虚函数的类类型,则在运行时计算类型。

使用typeid操作符

typeid最常见的用于是比较两个表达式的类型,或者将表达式的类型与特定类型相比较。


Base1 *bp=new Base1(); 
Child1 *cp=new Child1(); 
 
if(typeid(*bp)==typeid(*cp)){ 

if(typeid(*cp)==typeid(Child1)){ 

 Base1 *bp=new Base1();
 Child1 *cp=new Child1();

 if(typeid(*bp)==typeid(*cp)){
 }
 if(typeid(*cp)==typeid(Child1)){
 }只有当typeid的操作数是带虚函数的类类型的对象的时候,才返回动态类型信息。测试指针(相对于指针指向的对象)返回指针的静态的、编译时类型。

如果指针p的值是0,那么,如果p的类型是带虚函数的类型,则typeid(*p)抛出一个bad_typeid异常;如果p的类型没有定义任何虚函数,则结果与p的值是不相关的。

 

摘自 xufei96的专栏
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,