C++ Primer 笔记——运行时类型识别
1.dynamic_cast运算符的使用形式如下:
dynamic_cast<type*>(e) // e必须是一个有效指针
dynamic_cast<type&>(e) // e必须是一个左值
dynamic_cast<type&&>(e) // e不能是一个左值
2.如果一条dynamic_cast 语句的转换目标是指针类型并且失败了,则结果为0,如果转换目标是引用类型并且失败了,则dynamic_cast运算符将抛出一个bad_cast异常(因为不存在空引用)。
3.我们可以对一个空指针执行dynamic_cast,结果是所需类型的空指针。
4.typeid 表达式的形式是typeid(e),其中e可以是任意表达式或类型的名字。结果是一个常量对象的引用,该对象的类型是标准库类型type_info或者type_info的公有派生类型。当typeid作用于指针时(而非指针所指的对象),返回结果是该指针的静态编译时类型。
int *p = new int();
int *q = new int(); typeid(*p) == typeid(*q); // true
typeid(*p) == typeid(int); // true
typeid(p) == typeid(int); // false
5.typeid运算符可以作用于任意类型的表达式,顶层const被忽略如果表达式是一个引用,则typeid返回该引用所引对象的类型。当typeid作用于数组或函数时,并不会执行向指针的标准类型转换,也就是说我们对数组类型得到的结果是数组类型而非指针类型。
6.typeid是否需要运行时检查决定了表达式是否会被求值。只有当类型含有虚函数时,编译器才会对表达式求值,如果类型不含有虚函数,则typeid返回表达式的静态类型,因为编译器无须对表达式求值也能知道表达式的静态类型。如果需要求值得时候指针是空指针,则将抛出一个名为bad_typeid的异常。
7.type_info类的精确定义随着编译器的不同而略有差异。不过,C++标准规定type_info类必须在typeinfo头文件中,并且至少提供以下操作:

8.type_info类一般是作为一个基类出现,所以它还应该提供一个公有的虚析构函数,当编译器希望提供额外的类型信息时,通常在type_info的派生类中完成。type_info类没有默认构造函数,而且拷贝和移动构造函数以及赋值运算符都被定义成删除的。因此,我们无法定义或拷贝type_info类型的对象,也不能为type_info类型的对象赋值。创建type_info对象的唯一途径是使用typeid运算符。
C++ Primer 笔记——运行时类型识别的更多相关文章
- (C/C++学习笔记) 二十三. 运行时类型识别
二十三. 运行时类型识别 ● 定义 运行时类型识别(Run-time Type Identification, RTTI) 通过RTTI, 程序能够使用基类的指针或引用来检查(check)这些指针或引 ...
- C++学习之显式类型转换与运行时类型识别RTTI
static_cast const_cast reinterpret_cast 运行时类型识别(RTTI) dynamic_cast 哪种情况下dynamic_cast和static_cast使用的情 ...
- 《深入浅出MFC》系列之运行时类型识别(RTTI)
/********************************************************************************** 发布日期:2017-11-13 ...
- RTTI 运行时类型识别 及异常处理
RTTI 运行时类型识别 typeid ------ dynamic_cast dynamic_cast 注意事项: 1.只能应用于指针和引用之间的转化 2.要转换的类型中必须包含虚函数 3. ...
- RTTI (Run-Time Type Identification,通过运行时类型识别) 转
参考一: RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型. RTTI提供了以下两个 ...
- MFC六大核心机制之二:运行时类型识别(RTTI)
上一节讲的是MFC六大核心机制之一:MFC程序的初始化,本节继续讲解MFC六大核心机制之二:运行时类型识别(RTTI). typeid运算子 运行时类型识别(RTTI)即是程序执行过程中知道某个对象属 ...
- c++运行时类型识别(rtti)
一个简单运行时类型识别 namespace rtti_ex { /* * 类型信息基类 */ class i_type_info { public: // 判断是否是指定类型 bool is(cons ...
- Java基础之RTTI 运行时类型识别
运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息. 多态(polymorphism)是基于R ...
- 框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解)
框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解) 一丶什么是RTTI,以及RTTI怎么设计 通过第一讲,我们知道了怎么样升成一个窗口了,以及简单的消息循环. 第二讲则是主要讲解RTTI ...
随机推荐
- stega -- Pcat老入群题
stega -- Pcat老入群题 Pcat师傅的题果然给力,就是看着wp也是琢磨了半天. WP地址:http://mp.weixin.qq.com/s/T9jJLACiZNB6FR226IjmEA ...
- MySql cmd下的学习笔记 —— 有关常用函数的介绍(数学函数,聚合函数等等)
(一)数学函数 abs(x) 返回x的绝对值 bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制) ceiling(x) ...
- python初级实战-----关于邮件发送问题
python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块主要负责构造邮件. sm ...
- DataGrid列中加入CheckBox 全选 点击Header全选 和 只操作选中部分 功能的实现
先写个效果 中午接着写 反正没人看 只是给自己记录
- oracle监听的动态注册和静态注册
参考资料: https://blog.csdn.net/tianlesoftware/article/details/5543166 https://www.cnblogs.com/guilingya ...
- eMMC基础技术4:eMMC command
1.前言 本文主要对eMMC的command进行详细介绍,主要包含如下内容: (1)command类型 (2)command格式 2.command类型 command类型 说明 bc 不带respo ...
- 很清晰的解读i2c协议【转】
转自:https://blog.csdn.net/weixin_41718085/article/details/79376823 转载:http://dpinglee.blog.163.com/bl ...
- 题解-poj3682King Arthur's Birthday Celebration
Problem poj-3682 题目大意:抛一次硬币有\(p\)的概率得到正面,当有\(n\)次正面时停止,抛第\(i\)次的花费为\(2i-1\),求抛的期望次数和期望花费 Solution 本来 ...
- 解决:fatal error LNK1104: 无法打开文件“libc.lib”
今天使用VS2017编译比较老的VC++项目,出现了[fatal error LNK1104: 无法打开文件“libc.lib”]的链接器问题,解决方法如下: 项目->属性中->配置属性- ...
- 博客主Judge已跳槽搬家emmm
跳槽网站:博客园 顺便带一下:洛谷blog (好久没更了QAQ...) ### 不过csdn上还是会照常更新的,毕竟用着方便