动态运行时类型的显式转换
2015-06-08 16:56
239 查看
《effective C++》中第九章的内容,稍稍加上自己的理解。
C++中,显式转换也称为强制类型转换(cast),包括以下列名字命名的强制类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast。
一般形式: cast-name<type>(expression)
dynamic_cast:
该运算符把变量转换成type类型的对象,但type必须是类的指针、类的引用或者void*。若type为指针类型,则expression也必须是指针类型,(引用类型同理)。
dynamic_cast操作符一次执行两个操作:验证被请求的转换是否有效;实际转换。
dynamic_cast主要用户类层次间的上行转换和下行转换。
static_cast:
编译器隐式执行的任何类型转换都可以由static_cast显示完成。
static_cast可完成的类型转换:1,类型间所有的隐式转换。2,类层次间的下行转换(把基类指针或引用转换成子类指针或引用)。
但是static_cast的完成下行转换,没有动态类型检查,所以不安全(dynamic_cast的转换要进行动态类型检查)。
const_cast:
改变变量的const性质。添加或删除const属性。
reinterpret_cast:
在引入命名的强制类型转换操作符之前,显示强制转换用圆括号将类型括起来实现。
int *ip;
char *pc=(char*) ip;
等价于
int *ip;
char *pc=reinterpret_cast<char *>(ip);
C++中,显式转换也称为强制类型转换(cast),包括以下列名字命名的强制类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast。
一般形式: cast-name<type>(expression)
dynamic_cast:
该运算符把变量转换成type类型的对象,但type必须是类的指针、类的引用或者void*。若type为指针类型,则expression也必须是指针类型,(引用类型同理)。
dynamic_cast操作符一次执行两个操作:验证被请求的转换是否有效;实际转换。
dynamic_cast主要用户类层次间的上行转换和下行转换。
static_cast:
编译器隐式执行的任何类型转换都可以由static_cast显示完成。
static_cast可完成的类型转换:1,类型间所有的隐式转换。2,类层次间的下行转换(把基类指针或引用转换成子类指针或引用)。
但是static_cast的完成下行转换,没有动态类型检查,所以不安全(dynamic_cast的转换要进行动态类型检查)。
const_cast:
改变变量的const性质。添加或删除const属性。
reinterpret_cast:
在引入命名的强制类型转换操作符之前,显示强制转换用圆括号将类型括起来实现。
int *ip;
char *pc=(char*) ip;
等价于
int *ip;
char *pc=reinterpret_cast<char *>(ip);
相关文章推荐
- 多线程执行CPU过高问题
- 如何终止线程的运行
- SQL-DELETE
- 优雅的让Fragment监听返回键
- WindowsXP系统下建立局域网让多个计算机连接上网
- log4j.properties 的使用详解
- (PHP开发工程师)我的面试之旅
- “Ceph浅析”系列之二——Ceph的设计思想
- 【C++】 VS2010 打开VS2012 新建的工程
- ACE在windows平台下的编译安装
- 图形处理(一)离散指数映射参数化-Siggraph 2006
- g++编译安装
- webform用户控件
- 机器学习--交叉验证
- 机器学习--特征选择
- unity3d实现LOL中的相机控制功能
- 一点吐槽
- 错误3:this class is not key value coding-compliant for the key Mylabelss
- 循环学习小笔记
- chef cookbook 实战