C++四种强制类型转换
1.static_cast(编译时处理)
用于两个相关的类型的转换,属于静态转换(非多态类型转换)
2.const_cast(编译时处理)
删除已有变量的const属性,方便赋值,但是修改的话还是要加上volatile关键字只能对指针或者引用去除或者添加const属性,对于变量直接类型不能使用const_cast;
不能用于不同类型之间的转换,只能改变同种类型的const属性。
const int x = 10;
//volatile const int x = 10;
int *p = const_cast<int*>(&x);
*p = 20;
cout << x << "" << endl;
cout << *p << "" << endl; //结果为 10 20,还是不可见要加上volatile
3.dynamic_cast(运行时处理)
用于将父类的指针或者引用转换为子类的指针或者引用(dynamic_cast转换是安全的)
子类的指针或者引用可直接转换为父类的指针与引用(可以使用static_cast)
- dynamic_cast只能⽤于含有虚函数的类,因为它是运行时处理的, 在运行时类型检查的类型信息在虚函数表中,有虚函数才会有虚函数表
- dynamic_cast会先检查是否能转换成功,能成功则转换,不 能则返回0
向下转型:
class base
{
virtualvoid func(){}
};
class derived : public base
{
void func(){}
};
int main()
{
base *pb = new base();
derived *pd = dynamic_cast<derived *>(pb);//向下转型
return 0;
}
4.reinterpret_cast
对任意变量之间都能进行类型转化,无视类型