关键字 typeid

typeid 运算符用来获取一个表达式的类型信息。
ypeid 会把获取到的类型信息保存到一个 type_info 类型的对象里面,并返回该对象的常引用;当需要具体的类型信息时,可以通过成员函数来提取。

格式如下:
typeid(数据类型) 或
typeid(表达式)

type_info类的几个成员函数:

name() 用来返回类型的名称
raw_name() 用来返回名字编码(Name Mangling)算法产生的新名称
hash_code() 用来返回当前类型对应的 hash 值

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    int num1 = 6;
    float num2 = 2.1;
    double num3 = 42.324;
    
    const type_info &num1_info = typeid(num1);
    const type_info &num2_info = typeid(num2);
    const type_info &num3_info = typeid(num3);
    const type_info &num4_info = typeid(20*6/1.0);

     cout << num1_info.name() << endl;
    cout << num2_info.name() << endl;
    cout << num3_info.name() << endl;
    // 输出表达式
    cout << num4_info.name() << endl;
    
    return 1;
}

输出:
i
f
d
d

类型的比较

char *str;
int a = 2;
int b = 10;
float f;

类的比较

class Base{};
class Derived: public Base{};
Base obj1;
Base *p1;
Derived obj2;
Derived *p2 = new Derived;
p1 = p2;

:C++ 能获取到的类型信息非常有限,也没有统一的标准,如同“鸡肋”一般,大部分情况下我们只是使用重载过的“==”运算符来判断两个类型是否相同。

 
posted @ 2023-07-21 17:21  jason8826  阅读(55)  评论(0)    收藏  举报