C++中static_cast, dynamic_cast使用方法
2017-08-11 19:18
190 查看
前言
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++中四种类型转换运算符的使用方法(reinterpret_cast,const_cast,static_cast,dynamic_cast)
- c++ dynamic_cast与static_cast使用方法示例
- 【C++基础】类型转换运算符的使用方法(reinterpret_cast、 const_cast、static_cast、dynamic_cast)
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。(转)
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- c++类型转换关键字dynamic_cast和static_cast的使用区别
- 【转】使用标准C++的类型转换符:static_cast、dynamic_cast、const_cast和reinterpret_cast
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析
- 转C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterdivt_cast、和const_cast
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- C++中dynamic_cast、static_cast 使用说明
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。(转)