当前位置: 首页 > news >正文

建网站做日租房阿里云建站费用

建网站做日租房,阿里云建站费用,yanb2b这个网站怎么建设,app开发做网站用处: typeid()函数主要用来获取对应类型或者变量的类型信息,其返回一个std::type_info的对象,这个对象中存放了对应类型的具体信息。 所以typeid()函数就是获取一个type_info的类型,然后可以通过此类型来获取到相应的类型信息。 type_info的…

用处:

typeid()函数主要用来获取对应类型或者变量的类型信息,其返回一个std::type_info的对象,这个对象中存放了对应类型的具体信息。

所以typeid()函数就是获取一个type_info的类型,然后可以通过此类型来获取到相应的类型信息。

type_info的声明 

class type_info {
public:virtual ~type_info();bool operator==(const type_info& rhs) const;bool operator!=(const type_info& rhs) const;bool before(const type_info& rhs) const;const char* name() const;private:// 私有构造函数、复制构造函数和赋值运算符,以防止直接创建和复制type_info(const type_info&);type_info& operator=(const type_info&);
};

 这个类中你会发现内部有包含很多关于类型信息的操作函数。
 1. name();  // 可以获取到对应类型信息的名字。

 2. 重载了比较运算符,可以对获取到的类型信息进行比较。

 3. 主要的是,其赋值构造函数和有参构造函数,都设置为了私有的,在别的编译器实现可能会使用=delete删除掉,也就意味着我们没有办法使用type_info类定义对象,所以只有使用typeid才能够获取type_info类型的对象,来获取对应的信息。
 

注意:   type_info类型和typeid的实现是基于编译器的,也就是说c++只是提出了基于语法的层面,对于具体的实现不同的编译器是不一样的,但是用法都是类似的。

typeid的具体使用: 

首先说明,typeid的实现一般是基于虚函数的,当然是我们自己定义的类型,所以建议都使用虚函数。


原因是因为,基于c++的多态,虚函数会保存一个虚函数表的指针,虚函数表中会存储一个type_info的类型信息,但是至于存储在哪个位置,这是由编译器决定的,不同的编译器不一样,我们实际使用的时候没有必要关心。typeid就是借助虚函数表的机制可以判断出多态下父类指针指向的具体实际类型。

具体其实如何得知的,我猜测,应该是当父类的指针指向子类对象实现多态的时候,其对应父类的type_info信息的类型就会修改为其指向的子类类型。(不一定正确)

其实原因就是在多态的实现过程中,可以获取到对应指针指向的实际类型。

 定义一下三个类进行测试:

class People {
public:People() = default;virtual void write() {std::cout << "People\n";}
};class Man : public People {
public:Man() = default;virtual void write() override {std::cout << "Man\n";}
};class Woman : public People {
public:Woman() = default;virtual void write() override {std::cout << "Woman\n";}
};int main(void) {People* p1 = new People;Man* m1 = new Man;People* p2 = m1;    // 使用多态std::cout << typeid(p1).name() << std::endl;  // class People*std::cout << typeid(m1).name() << std::endl;  // class Man*std::cout << typeid(p2).name() << std::endl;  // class People*std::cout << typeid(*p2).name() << std::endl;  // class Manreturn 0;
}

对应的输出结果已经在函数调用之后了,记住typeid函数返回一个type_info类型的对象,但是我们不能使用这样的类型去接收,因为外部不可定义其对象,所以获取type_info类型只有通过typeid,所以获取之后直接使用这个对象。

代码中调用name()获取具体对象的类型。

仔细看最后一个打印信息,p2是一个父类指针对象,所以其类型是父类指针类型,但是*p2则不一样,由于多态的实现,*p2就是p2指针实际指向的类型,此处为Man类型,所以我们使用typeid检测之后得到的就是Man类型的数据。

也可以用于一般类型: 

std::cout << typeid(int) << std::endl;  // int

类型进行比较

if(typeid(int) == typeif(float)){}else{}

 我们可以直接使用==比较两个类型是否相同,相同执行一个分支否则执行另外一个分支,实现运行时类型检查,不同的类型情况进行不用的代码。

dynamic_cast借助typeid进行运行时类型检测 

dynamic_cast是c++新增的类型强制转换,其主要用于继承系列的类型转换,成功返回转换后的指针,失败返回NULL。


其就是根据typeid获取对应的变量的实际类型,然后根据继承树来判断是否可以转换,子类转父类没问题,父类转子类会返回NULL。

http://www.zhongyajixie.com/news/32696.html

相关文章:

  • 网站模板asp旺道智能seo系统
  • 南京市网站热搜榜排名前十
  • seo资源网站排名营销推广计划
  • 做旅游网站绍兴百度seo
  • 沈阳哪家公司网站做的好seo推广系统排名榜
  • 淘宝美工培训班深圳seo公司排名
  • 深圳网站建设软件开发公司哪家好100个商业经典案例
  • 个人网站设计师百度热度
  • 苏州市建设局网站首页怎样做网络推广效果好
  • 投资建设网站首页长尾关键词有哪些
  • 网站建设技术文档宁波关键词排名优化
  • 网站菜单框架网络推广合同
  • 华梦服饰网站建设中推广公司是做什么的
  • 传统小型企业做网站的好处个人免费网上注册公司
  • 济南网站建设认可搜点网络搜索广告和信息流广告区别
  • 网站开发 网站设计模板网站哪个好
  • 深圳网站建设定制营销策划案
  • 网站死链怎么办常州网站推广排名
  • 接做网站需要问什么新闻头条今日要闻10条
  • 网站建设做到哪些内容seo品牌
  • 哪家公司设计网站百度竞价排名点击软件
  • 万州电商网站建设品牌营销案例
  • 自己做网站如何挣钱百度指数官网
  • 网站改版要重新备案360网站安全检测
  • 日本做网站郑州热门网络推广免费咨询
  • 35互联做的网站如何竞价托管服务公司
  • 青岛网站域名备案查询宁波seo网站推广软件
  • 网站搭建后如何使用武汉seo网站优化技巧
  • 电子印章在线制作生成器免费优化师培训机构
  • 公众号链接的手机网站怎么做关键词排名点击软件网站