C++四种强制类型转换

 

C++的四种强制类型转换,所以C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast

为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C++类型的强制转换呢?

新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。C++中风格是static_cast<type>(content)。C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干什么。程序员只要扫一眼这样的代码,就能立即知道一个强制转换的目的。

四种转换的区别:

static_cast:  1.可以实现C++中内置基本数据类型之间的相互转换。

                    2.派生类体系中的向上转化,也就是派生类指针或引用转化为基类指针或引用。

 

 

const_cast: c只能对指针或者引用添加或者去除const属性,不能对一个变量直接类型使用const_cast。并且不能用于不同类型之间的转化,只能用于相同类型。

                 1.常用于一个函数形参是非const引用,我想传进去const引用,使用const_cast将实参去除const属性。

                  2.一个const对象,我们想要调用非const函数,可以用const_cast去除对象常性。

 

dynamic_cast: 派生类指针或引用和基类指针或引用之间的相互转化。

(1)其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行类型检查。

(2)不能用于内置的基本数据类型的强制转换。

(3)dynamic_cast转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL。

(4)基类中要有虚函数,因为运行时类型检查的类型信息在虚函数表中,有虚函数才能有虚函数表。

 (5)可以实现向上或向下转型,前提是必须public或protected继承。在类的转换时,在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的。在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。

reinterpret_cast: 有着和C风格的强制转换同样的能力。也就是说可以在任意两个类型之间进行转化。不常用。

 

 

 

总 结

 

  去const属性用const_cast。

  基本类型转换用static_cast。

  多态类之间的类型转换用dynamic_cast。

  不同类型的指针类型转换用reinterpreter_cast。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值