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 ...
随机推荐
- VGGNet学习——实践
0 - DataSet http://www.csc.kth.se/~att/Site/Animals.html 1 - Code 1.1 - Import Packages import tenso ...
- bash常用指令(未完)
#号注释1.man 2.cd 3.clear 4.alias 命令别名设置 区别命令别名和变量的区别,别名可以直接执行,本质是一个函数的索引 5.grep 查找字符串 grep [-acinv] [- ...
- map中的count方法
map.count(Key)返回值为1或者0,1返回存在,0返回不存在,返回的是布尔类型的值,因为在map类型中所有的数据的Key值都是不同的,所以被count的数要么存在1次,要么不存在
- FLASK-----基本知识(一)
中文文档(http://docs.jinkan.org/docs/flask/) 英文文档(http://flask.pocoo.org/docs/0.11/) FLASK介绍 Flask是一个基于P ...
- python第七天,dict
在python里边创建字典的方法有如下几种: >>> dict1= dict(((),(),(),(),())) >>> print(dict1) {, , , , ...
- Http 请求头中 X-Requested-With 的含义
昨天看代码的时候,看到了这个一句 String requestedWith = ((HttpServletRequest) request).getHeader("X-Requested-W ...
- 统计分析与R软件-chapter2-2
2.2 数字.字符与向量 2.2.1 向量 1.向量的赋值 x<-c(10.4,5.6,3.1,6.4,21.7) 2.向量的运算 x<-c(-1,0,2);y<-c(3,8,2) ...
- Python运维开发基础06-语法基础【转】
上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...
- requests库入门11-重定向和请求历史
默认情况下,除了head请求,requests会自动处理重定向 重定向就是会把url重新指定到另一个.比如github,使用http会自动重定向到https.一些公司也会使用网关啥的做重定向. r = ...
- 【转】Java并发编程:并发容器之ConcurrentHashMap
JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了 ...