C++:运行时类型检查-关键字typeid

运行时类型检测(run-time type identification, RTTI)

关键字 typeid 返回表达式的类型

使用前应引用

typeid(表达式\类型名)
  • 返回一个常量对象的引用,该对象的类型为标准库类型type_info或type_info的共有派生类。

  • 顶层const将被忽略

  • 作用于数组或函数时,不会执行指针的标准类型转换(即指针与数组区别对待,指针是指针类型,数组是数组类型。)

  • 当作用于某种类型的指针或引用时,如果该类型含有虚函数,运算符将使用指针或引用所绑定对象的动态类型

  • typeid作用于指针时(而非指针所指向的对象),返回的结果是该指针的静态编译时类型!!

  • type_info 对象操作

    • == 相等判断
    • !=
    • name() 打印类型名(依赖编译器实现)
    • t1.before(t2) 返回bool,t1是否在t2之前(依赖编译器)
  • name()

    int t_int;
    long long t_long_long;
    long t_long;
    float t_float;
    double t_double;
    char t_char;
    cout<<typeid(t_int).name()<<endl;
    cout<<typeid(t_long_long).name()<<endl;
    cout<<typeid(t_long).name()<<endl;
    cout<<typeid(t_float).name()<<endl;
    cout<<typeid(t_double).name()<<endl;
    cout<<typeid(t_char).name()<<endl;
    cout<<"--------------"<<endl;
    int *a;
    int b[10][13];
    int *c[10];
    int *(*d)[10];
    int (*(*e[100])(char,int, float))[10];
    int (*(*(*f)(int *))[5])(int *);
    int (*(*g[7][8][9])(int*))[5];
    cout<<typeid(a).name()<<endl;
    cout<<typeid(b).name()<<endl;
    cout<<typeid(c).name()<<endl;
    cout<<typeid(d).name()<<endl;
    cout<<typeid(e).name()<<endl;
    cout<<typeid(f).name()<<endl;
    cout<<typeid(g).name()<<endl;

输出

i
x
l
f
d
c
Pi
A10_A13_i
A10_Pi
PA10_Pi
A100_PFPA10_icifE
PFPA5_PFiPiES_E
A7_A8_A9_PFPA5_iPiE

可见

P_type 表 type *p; 
Anum 表 A[num]
F+返回值类型+参数类型1+参数类型2+...+参数类型n+E 表示 函数
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绫零依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值