typeid

 


如果表达式的类型是类类型且至少包含有一个虚函数,则typeid操作符返回表达式的动态类型,需要在运行时计算;

否则,typeid操作符返回表达式的静态类型,在编译时就可以计算。

1、返回值和参数

 

// 返回值类型
type_info  // 标准库类型,相当于一个类
// 其中有成员函数 name() 可以显示当前类型的名字
// 参数类型 可以是变量名,也可以是变量类型名
typeid(指针/引用); 
typeid(表达式);

2、主要用途

比较两个指针是否指向同一种类型

class Human;   // 基类

class Men : public Human;  

class Women : public Human;

int main()
{
    Human* pMen = new Men;
    Human* pWomen = new Women;
    if (typeid(pMen) == typeid(pWomen)) {
        // 该条件成立,得到的都是Human 类型
    }
    if (typeid(*pMen) == typeid(*pWomen)) {
        // 该条件不成立,对比的是两个指针所指内容的类型
    }
    if (typeid(*pMen) == typeid(Men)) {
        // 直接将指针所指的内容,去与期望的类型比较
    }
    // 所以如果要对比的是指针所指向的内容是否相同,则需要加*,得到其所指内容
    // 注意:前提是Human中有虚函数,才具有多态性
}

3、type_info 类

// 常用函数 name() 返回值为char const *
char const * a = typeid(int).name();
// type_info与虚函数表的关系

// 虚函数表中有很多项,每一项都指向一个虚函数的入口地址

// 虚函数表的第一项比较特殊,指向的是这个类关联的 type_info 对象

 

posted @ 2020-06-07 22:06  min_zhi  阅读(308)  评论(0)    收藏  举报