cpp——显式类型转换

显式转换,又称强制转换

显式转换尽可能少用,如果程序使用了大量显式转换,本身就是程序设计有问题,显式转换是告诉程序读者和编译器,此处存在安全隐患

static_cast,静态转换

class B
{
};

class D : public B
{
};

int main()
{
    int i;
    double d;
    i = static_cast<int>(d);
    d = static_cast<double>(i);

    int *pi;
    double *pd;
    void *pv;
    pv = pi;
    pv = static_cast<void *>(pi);
//    pd = pv;
    pd = static_cast<double *>(pv);

    const int *pci = &i;
    pci = static_cast<const int *>(&i);

    B objb;
    D objd;
    objb = objd;
    //objd = objb;
    objb = static_cast<B>(objd);
//    objd = static_cast<D>(objb);

    B *pobjb;
    D *pobjd;
    pobjb = pobjd;
//    pobjd = pobjb;
    pobjb = static_cast<B *>(pobjd);
    pobjd = static_cast<D *>(pobjb);

    B &rb = static_cast<B &>(objd);
    D &rd = static_cast<D &>(objb);

    return 0;
}

 

 
 
 总结 

适用static_cast情形

所有隐式转换

void *转其他类型指针

基类指针转派生类指针(不安全)

基类转派生类引用(不安全)


dynamic_cast,去除指针和引用目标对象的const属性

const_cast

    int i;
    const int ci = i;
    int *pi;
    const int *pci;
    pi = &i;
    pci = &ci;

//    pi = &pci;
    pi = const_cast<int *>(pci);

    //int &ri = ci;
    int &ri = const_cast<int &>(ci);

 
 

总结

适用const_cast情形

指向const对象指针转指向普通对象指针

const对象绑定到普通对象引用

记住:引用的本质是指针,表面把对象赋给引用,本质把对象地址赋给指针


reinterpret_cast

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值