显式类型转换

    将一种类型转换为另一种类型,转换后的变量,它的内部数据存储方式也随之发生改变,有四个显示的类型转换函数,reinterpret_cast,const_cast,static_cast,dynamic_cast.前面三个是在编译期间实现转换的,最后一个是在运行时实现转换,还可返回转换成功与否标志。

    double d=3.2;

    int i=d;//隐式转换,i=3

    double d=3.2;

    int i=static_cast<int>(d);//显式转换,i=3


转换函数的原型

    reinterpret_cast<new_type>(expression)

    const_cast<new_type>(expression)

    static_cast<new_type>(expression)

    dynamic_cast<new_type>(expression)

    将expression表达式的值转换为new_type类型的值。


reinterpret_cast

    用于任意指针(或引用)类型之间的转换,指针与足够大的整数类型之间的转化(从整数类型到指针类型,无视大小)。不修改指针变量值数据存放格式,只在编译时重新解释指针的类型。不能用于非指针类型的转换。还可将一个指针值转换为整型数。即expression必须是个指针类型。不能将const指针转换为void*指针。


const_cast

    去除指针变量的常量属性,将它转换为一个对应指针类型的普通变量。也可将一个非常量的指针变量转换为一个常指针变量。不能将非指针的常量变为普通变量。


static_cast

    用于基本类型和具有继承关系的类型之间的转换。会改变变量的内部表示方式。继承类和基类的指针可以相互转换,继承类可转换为基类,不可转化基本类型的指针,基类不可转换为继承类。


dynamic_cast

    只能在继承类对象的指针之间或引用之间进行转换。

    vc++编译器默认禁止使用RTTI信息,若要使用dynamic_cast,需执行“工程-设置”在“c++”选项卡中,选择“c++language”,勾选“允许运行时类型信息RTTI”

 

在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值