C++中static_cast, dynamic_cast用法
来源:互联网 发布:it实用技巧 编辑:程序博客网 时间:2024/06/05 00:54
前言
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的使用做举例了。
0 1
- C++中static_cast, dynamic_cast用法
- C++中static_cast, dynamic_cast用法
- c++中static_cast与dynamic_cast用法小结
- static_cast,const_cast, dynamic_cast,reinterpret_cast用法
- const_cast dynamic_cast reinterpret_cast static_cast用法
- const_cast dynamic_cast reinterpret_cast static_cast用法
- const_cast dynamic_cast reinterpret_cast static_cast用法 .
- static_cast和dynamic_cast的用法
- C++中dynamic_cast、static_cast 使用说明
- 用法总结 static_cast、dynamic_cast、reinterpret_cast、和const_cast
- static_cast,const_cast,dynamic_cast,reinterpret_cast的用法
- static_cast, dynamic_cast, reinpreter_cast, const_cast的用法
- static_cast、dynamic_cast reinterpret_cast和const_cast用法
- static_cast, dynamic_cast, reinpreter_cast, const_cast的用法
- static_cast dynamic_cast const-cast reinterpret_cast的用法
- static_cast,dynamic_cast,reinterpret_cast和c语言转换
- bad_cast,const_cast,dynamic_cast,reinterpret_cast,static_cast(C++)
- 0.c++-static_cast、reinterpret_cast、dynamic_cast、等转换
- 25. 自定义Git
- Android基本控件之Button和ImageButton
- SylixOS JobQueue 简介
- IT人的自我导向型学习:学习的1个理念和2个心态
- bug调试
- C++中static_cast, dynamic_cast用法
- UITextField输入框中是否有个叉号(用于一次性删除输入框中的内容)
- MySQL笔记之数据备份与还原的使用
- python __file__的绝对路径与import的搜索路径
- js实现文本框提示
- javabean 不同的类 相同属性赋值
- 黑马程序员_多线程_1
- Android之WebRTC介绍
- Android中Context简介