C++四种强制类型转换的机制与功能

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)

  1. dynamic_cast只能⽤于含有虚函数的类,因为它是运行时处理的, 在运行时类型检查的类型信息在虚函数表中,有虚函数才会有虚函数表
  2. 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

对任意变量之间都能进行类型转化,无视类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值