C++中static_cast, dynamic_cast使用方法
前言
Android的Framework层源代码中有非常多强制类型转换函数的调用。写惯了C代码的人一般都习惯以下这样的强制转换方式:
double a = 89;
int b = (int)a;
可是。在C++代码中,不推荐使用C这样的(type-id)的强制转换风格代码,更推荐使用C++的标准类型转换符:static_cast和dynamic_cast。
static_cast
static_cast的函数原型例如以下:
static_cast<type-id>(expression)
说明:
该运算符把expression转换为type-id类型。
详细使用方法例如以下:
- 用于类层次结构中基类和子类之间指针或引用的转换。向上转型(把子类的指针或引用转换成基类表示)是安全的;向下转型(把基类指针或引用转换成子类指针或引用)时,因为没有动态类型检查。所以是不安全的。
- 用于基本数据类型之间的转换。
- 把void指针转换成目标类型的指针。
演示样例:
// 1. 类转换
class Base {};
class Child : public Base {};
Child *a = new Child();
Base *b = static_cast<Base *>(a);
// 2.基本类型转换
int i = 5;
double r = static_cast<double>(i);
// 3. void* 类型转换
void *p = &i;
int *s = static_cast<int *>(p);
dynamic_cast
dynamic_cast的函数原型例如以下:
dynamic_cast<type-id>(expression)
说明:
该运算符把expression转换成type-id类型的对象。type-id必须是类的指针、类的引用或者void *。假设type-id是类指针类型,那么expression也必须是一个指针,假设type-id是一个引用,那么expression也必须是一个引用。
备注:
因为在Android源代码中我没有看到dynamic_cast的使用,所以这里就不正确dynamic_cast的使用做举例了。
C++中static_cast, dynamic_cast使用方法的更多相关文章
- C++中static_cast和dynamic_cast强制类型转换
在C++标准中,提供了关于类型层次转换中的两个关键字static_cast和dynamic_cast. 一.static_cast关键字(编译时类型检查) 用法:static_cast < ty ...
- static_cast, dynamic_cast, const_cast
http://www.cnblogs.com/chio/archive/2007/07/18/822389.html 首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1 ...
- static_cast, dynamic_cast, const_cast探讨
转自:http://www.cnblogs.com/chio/archive/2007/07/18/822389.html 首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 ...
- 【C++专题】static_cast, dynamic_cast, const_cast探讨
首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion ...
- C++之static_cast, dynamic_cast, const_cast
转自:http://www.cnblogs.com/chio/archive/2007/07/18/822389.html 首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 ...
- c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast
c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast [版权声明]转载请注明出处 http://www.cnblogs.c ...
- JavaScript中Math对象的方法介绍
1.比较最值方法 比较最值有两种方法,max() 和 min() 方法. 1.1 max() 方法,比较一组数值中的最大值,返回最大值. var maxnum = Math.max(12,6,43,5 ...
- Android中锁定文件的方法
androidSDK中并没有锁定文件相关的api. 但是android是基于linux操作系统的,linux比较底层,灵活性也更大,为了实现锁定文件的效果,大概有以下几种办法: 用chmod命令修改文 ...
- jQuery中的事件绑定方法
在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...
随机推荐
- 常用jdbc操作
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection con = DriverMa ...
- input text的所有事件
onBlur 当 text field失去聚焦的时候执行一些代码 onChange 当 text field失去聚焦并且它的值发生变动的时候执行一些代码 onClick 当用户在 text field ...
- 【js】批量判断表单中的文本框非空
方法一: <script type=”text/javascript”> /* * 批量验证表单非空 * 需要非空验证控件的样式class=”mustadd” */ $(".mu ...
- python学习笔记012——locals与globals
1 定义 globals() 功能:收集全局变量参数:无返回值:得到一个收集全局变量的字典(会包含系统的内置变量) locals() 功能:收集局部变量参数:无返回值:得到一个收集局部变量的字典 a ...
- shell 提取mysql指定数据库下表创建语句为单文件
dbcn="mysql -h172.16.1.194 -uroot -p123456"; db=dsp_ad_center; ii=0; ct=`$dbcn -N -e " ...
- 检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式
非常简单可以解决: 方法一,用editplus打开,再复制回VS 方法二:在VS中,点文件->高级保存选项,然后在行尾选项中选择windows(CR LF),重新编译,ok
- Python 元组 max() 方法
描述 Python 元组 max() 方法返回元组中元素最大值. 语法 max() 方法语法: max(T) 参数 T -- 指定的元组. 返回值 返回元组中元素最大值. 实例 以下实例展示了 max ...
- 程序员减少bug
1.认真理解需求 2.构思好程序逻辑流程,再编写 3.编写单元测试 4.多进行case测试,做好功能测试 5.互相review代码
- Spring自带配置方式链接数据库(没有src新建文件,没有c3p0)
1.配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:/ ...
- Redis安装(源码安装)
安装环境(redis3.0以上才支持集群部署) 1.服务器环境:linux Centos release 6.8 2.Redis版本(2.8.13)下载地址:http://download.redis ...