关键字 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 @   jason8826  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示