• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++运行时获取类型信息的type_info类与bad_typeid异常

C++运行时获取类型信息的type_info类与bad_typeid异常

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++ typeid,dede:type typeid 2,dede:type typeid,dede:type typeid 1,dede:type typeid 5等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

type_info 类
type_info 类描述编译器在程序中生成的类型信息。此类的对象可以有效存储指向类型的名称的指针。 type_info 类还可存储适合比较两个类型是否相等或比较其排列顺序的编码值。类型的编码规则和排列顺序是未指定的,并且可能因程序而异。
必须包含 <typeinfo> 标头文件才能使用 type_info 类。 type_info 类的接口是:

class type_info {
public:
  virtual ~type_info();
  size_t hash_code() const
  _CRTIMP_PURE bool operator==(const type_info& rhs) const;
  _CRTIMP_PURE bool operator!=(const type_info& rhs) const;
  _CRTIMP_PURE int before(const type_info& rhs) const;
  _CRTIMP_PURE const char* name() const;
  _CRTIMP_PURE const char* raw_name() const;
};
</div>

您不能直接实例化 type_info 类的对象,因为该类只有一个私有复制构造函数。构造(临时)type_info 对象的唯一方式是使用 typeid 运算符。由于赋值运算符也是私有的,因此不能复制或分配类 type_info 的对象。
type_info::hash_code 可定义适合将 typeinfo 类型的值映射到索引值的分布的哈希函数。
运算符 == 和 != 分别用于与其他 type_info 对象比较是否相等和不相等。
类型的排列顺序与继承关系之间没有关联。使用 type_info::before 成员函数可确定类型的排序顺序。不能保证 type_info::before 在不同的程序中(甚至是多次运行同一程序时)会产生相同的结果。这样,type_info::before 类似于 address-of (&) 运算符。
type_info::name 成员函数可将 const char* 返回到以 null 结尾的字符串,该字符串表示类型的用户可读名称。将缓存所指向的内存,应该从不直接释放它。
type_info::raw_name 成员函数可将 const char* 返回到以 null 结尾的字符串,该字符串表示对象类型的修饰名称。该名称实际上以其修饰的形式存储以节省空间。因此,此函数比 type_info::name 更快,因为它不需要取消修饰名称。 type_info::raw_name 函数返回的字符串在比较运算符中很有用,但它不可读。如果您需要用户可读的字符串,请改用 type_info::name 函数。

bad_typeid 异常
当 typeid 的操作数是 Null 指针时,typeid 运算符将引发 bad_typeid 异常。
语法

  catch (bad_typeid)
statement
</div>

备注
bad_typeid 的接口为:

class bad_typeid : public exception
{
public:
  bad_typeid(const char * _Message = "bad typeid");
  bad_typeid(const bad_typeid &);
  virtual ~bad_typeid();
};
</div>

以下示例演示引发 bad_typeid 异常的 typeid 运算符。

// expre_bad_typeid.cpp
// compile with: /EHsc /GR
#include <typeinfo.h>
#include <iostream>

class A{
public:
  // object for class needs vtable
  // for RTTI
  virtual ~A();
};

using namespace std;
int main() {
A* a = NULL;

try {
  cout << typeid(*a).name() << endl; // Error condition
  }
catch (bad_typeid){
  cout << "Object is NULL" << endl;
  }
}

</div>

输出

Object is NULL
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++运行时获取类型信息的type_info类与bad_typeid异常
  • 详解C++编程中的sizeof运算符与typeid运算符

相关文章

  • 2017-05-28VC中SendMessage和PostMessage的区别
  • 2017-05-28引用参数和传值参数的区别深入解析
  • 2017-05-28二叉查找树的插入,删除,查找
  • 2017-05-28visual studio 2015下boost库配置教程
  • 2017-05-28C++访问Redis的mset 二进制数据接口封装方案
  • 2017-05-28C语言实现稀疏矩阵
  • 2017-05-28使用ShellClass获取文件属性详细信息的实现方法
  • 2022-04-30哪款C语言编译器(IDE)适合初学者?
  • 2017-05-28C语言中打印特殊图案的实现代码
  • 2017-05-28VC6.0实现读取Excel数据的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++获取类的成员函数的函数指针详解及实例代码
    • 详解C++编程中的私有继承和公有继承
    • C++中关于委派(Delegates)的实现示例
    • 将CString字符串输入转化成整数的实现方法
    • c语言中指针大小以及使用初始化问题
    • C语言中数组作为函数的参数以及返回值的使用简单入门
    • c++实现二叉查找树示例
    • 详解C++中的指针结构体数组以及指向结构体变量的指针
    • C++实现二叉树遍历序列的求解方法
    • C++ vector删除符合条件的元素示例分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有