C++四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
1、static_cast
static_cast 用于数据类型的强制转换,强制将一种数据转换成另一种数据, 编译阶段是类型检查;
用法:static_cast<type_id>(express)
- 用于类层次结构中基类和派生类之间指针或引用的转换(上行转换,即派生类的指针或引用转换成基类,是安全的;下行转换,即基类的指针或引用转换为派生类,没有动态类型检查,是不安全的);
- 用于基本数据类型之间的转换;
- 把空指针转换成目标类型指针;
- 把任何类型的表达式转换为void类型。
int a = 3;
int b = 2;
double res = static_case<double>(a) / static_cast<double>(b);
2、dynamic_cast
- dynamic_cast是运行时处理的,运行时要进行类型检查;
- 不能用于内置的基本数据类型的强制转换;
- dynamic_cast转换成功返回值是指向类的指针或引用,否则返回NULL;
- 使用dynamic_cast进行转换,基类中一定要有虚函数;
- 下行转换时具有类型检查的功能,比static_cast更安全
3、const_cast
const_cast 用于修改类型的const或volatile属性。通常用来去除const、 volatile属性,去除的对象必须是指针或引用。
- 常量指针被转化成非常量指针
- 常量引用被转化成非常量引用
- 常量对象被转化成非常量对象
用法:const_cast<type_id>(expression)
const in a = 10
const int *p = &a;
*q = const_cast<int *>(p);
*q = 20
4、reinterpret_cast
reinterpret_cast用于改变指针或引用的类型、将指针或引用转换为一个足够长度的整形、将整形转换为指针或引用类型
即,可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针
用法:reinterpret_cast<type_id>(express)
type_id必须是一个指针、引用、算术类型、函数指针或成员指针。
int *a = new int;
double *d = reinterpret_cast<double *>(a)
引用链接:
https://www.cnblogs.com/Allen-rg/p/6999360.html