温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++中TypeId怎么用

发布时间:2021-10-21 09:57:34 来源:亿速云 阅读:157 作者:小新 栏目:编程语言

这篇文章主要介绍了C++中TypeId怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

  • 简介

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

  • 使用场景

用法如下:

    cout<<typeid(int).name()<<endl;    
    int a;
    cout<<typeid(a).name()<<endl;

输出如下:

int

int

  • 注意事项

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

比如有类 A,其中定义有虚函数,而类B,C,D都是从类A派生而来的且重定义了该虚函数,这时有个类A的指针p和p1,按照虚函数的原理,基类的指针可以指向任何派生类的对象,在这时就有可能需要比较两个指针是否指向同一个对象,这时就可以这样使用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)的话,则无论指针p和p1指向的什么派生类对象,他们都是相等的,因为都是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开关。

感谢你能够认真阅读完这篇文章,希望小编分享的“C++中TypeId怎么用”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI