1、static_cast(静态转换)
static_cast<type>(expre)
使用范围:
1)用于基本类型间的转换,如int->char,int->enum
2)指针转换的限制:不能转换掉const,volatile或者__unaligned属性。指针类型不同不能进行转换
3)可以将void*转换成任意指针类型
4)左值转化成右值(C++11常性右值退化成常性左值)
5)继承关系父子类转换
上行转换是安全的:把派生类指或引用转换成基类
下行转换是不安全的:把基类指针或引用转换成派生类时,没有动态检查
用处:std::move、std::forward
2、const_cast(去常性转换)
可以修改类型的const和volatile
特点:
1)去除变量的只读属性
2)强制转换的目标必须时指针或引用
内置类型在打印时,编译器看到是常性值,直接进行替换操作,无法实现修改值
自定义类型可以做到
去常性转换针对于同一类型
3、reinterpret_cast(重新解释)
说明:要求类型必须是一个指针、引用、算数类型、函数指针或者成员指针。
特点:
1)用于指针类型间的强制转换
2)用于整数和指针类型的强制转换
4、dynamic_cast(动态类型转换)
基类必须有虚函数,必须是共有继承
动态转换时会读取虚表中RTTI的数据来确定转换是否成功
特点:
1)是在运行时执行的类型转换
2)如果针对指针类型转换失败,结果会抛出nullptr
3)如果针对引用类型转换失败,结果会抛出一个异常
4)在进行上行转换时,效果和静态转换一样
5)在进行下行转换时,dynamic_cast具有类型检查的功能,更加安全
6)动态类型转换能将对象类型转换成无类型,不能将无类型转换成对象类型