欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > c/c >内容正文

c/c

c typeid简介与使用 -凯发k8官方网

发布时间:2025/1/21 c/c 25 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 c typeid简介与使用 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
  • 简介

typeid 返回一个变量或数据类型的“类型”。


  • 使用场景

用法如下:

    cout<输出如下:

int

int


  • 注意事项

如果有类a,且有虚函数,类bcd都是从类a派生的,且都重定义了类a中的虚函数,这时有类a的指针p,再把对象类b的对象的地址赋给指针p,则typeid(p).name()将返回的类型将是a* 因为这里的p表示的是一个指针,该指针是类型为a的指针, 所以返回a* typeid(*p).name()将返回b,因为指针p是指向类b的对象的,而*p就表示的是类b的对象的类型,所以返回b

比如有类 a,其中定义有虚函数,而类bcd都是从类a派生而来的且重定义了该虚函数,这时有个类a的指针pp1,按照虚函数的原理,基类的指针可以指向任何派生类的对象,在这时就有可能需要比较两个指针是否指向同一个对象,这时就可以这样使用typeid了,typeid(*p)= =typeid(*p1);这里要注意的是typeid(*p)typeid(p)是指的不同的对象类型,typeid(p)表示的是p的类型,在这里p是一个指针,这个指针指向的是类a的对象,所以p的类型是a* typeid(*p)则不一样, *p表示的是指针p实际所指的对象的类型 比如这里的指针p指向派生类b,则typeid(*p)的类型为b。所以在测试两个指针的类型是否是相等时应使用*p,即typeid(*p)= =typeid(*p1)。如果是typeid(p)= =typeid(p1)的话,则无论指针pp1指向的什么派生类对象,他们都是相等的,因为都是a *的类型。

 

  • 相关文献和资料

    关于typeid的错误(warning c4541: 'typeid' used on polymorphic type 'class a' with /gr-; unpredictable behavior may result)

    解决方法:在vc6. project - settings... - c/c  ,在category那里选 c language,再在下边勾上 enable run-time type information[rtti]。这样再运行程序的时候就不会有错误了。

        rtti(运行时类型信息)会带来额外的开销,大部分编译器都支持rtti,但在默认情况下关闭此功能,需要用上面的方法打开rtti开关。


转载于:https://blog.51cto.com/844133395/1883243

总结

以上是凯发k8官方网为你收集整理的c typeid简介与使用的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图