加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c-typeid用于多态类型

发布时间:2020-12-16 03:15:14 所属栏目:百科 来源:网络整理
导读:我预计这个代码打
我预计这个代码打印“Same 1”和“Same2”,但它只打印“Same1”:
#include <iostream>
#include <typeinfo>
using namespace std;

struct C{virtual ~C(){}};
struct D : C{};
int main(){
   D d;
   C c,&cr1 = d;
   if(typeid(cr1) == typeid(D)) cout << "Same1";
   if(typeid(&cr1) == typeid(D*)) cout << "Same2";
}

§5.2.8/ 2和§5.3.1/ 3似乎表明我应该打印“Same2”.

抓到什么和在哪里?

解决方法

指针不是多态类型.他们没有虚拟成员.事实上,他们没有任何成员.它们也不能从其他类型派生,也不能用作基类.因此,T *的静态和动态类型总是T *.

在“Same2”行中,您将比较一个指针的typeid,而不是指向对象.因此,编译器仅查看静态类型C *和D *.它们显然不一样,必须有不同的type_info对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读