c++中类型转换操作符

      

       在C语言中,类型转换只需要在变量前加上转换的类型即可,而且转换可以是双向的,但是这种粗暴的类型对付基本类型还可以,对付复杂类型就力不从心了。因此C++提供了四种类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret

(1)static_cast

    static_cast可以完全代替C风格的类型转换实现基本类型的转换。此外可以将父类指针转换为子类指针,也可以将子类指针转换为父类指针,但是如果两个类是不相关的,无法相互转换。但是需要注意的是:如果父类指针指向的父类对象,此时将父类指针转换为子类指针虽然可以通过static_cast实现,但是这种转换可能是不安全的,如果父类指针本身指向一个子类对象,则不存在安全问题。

(2)dynamic_cast

    dynamic_cast只能用于对象指针之间的类型转换,可以将父类指针转换为子类指针,也可以将子类指针转换为父类指针,此外转换结果也可以是引用。与static_cast的区别是,dynamic_cast在将父类指针转换为子类指针过程中,对背后的类型进行检查保证类型完全匹配,但是static_cast不会这样做。只有当一个父类指针指向子类对象时,并且父类中包含虚函数时,使用dynamic_cast才会成功,否则返回NULL指针,如果是引用则抛出异常。

(3)const_cast

    const_cast可以在转换的过程中增加或者删除const属性。一般无法将常量指针直接赋给普通指针,但是通过const_cast可以移除常量指针的const属性,实现const指针到非const指针的转换。

(4)reinterpret_cast

    reinterprep_cast可以将一种类型的指针直接转换为另一种类型的指针,不论两个类之间是否有继承关系。还可以将一个指针转换为一个整数,也可以将一个整数转换为一个指针。还可以用于不同函数指针之间的转换。

 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值