显示类型转换

显示类型转换

1.静态类型转换

•static_cast<目标类型> (源类型对象)

–编译器对源类型和目标类型做相容性检查,检查不通过报错

–源类型和目标类型只要在一个方向上可以做隐式类型转换,那么在两个方向上就都可以做静态类型转换

–如果将目标类型从源类型的类型转换构造函数,或者源类型向目标类型的类型转换运算符函数,被声明为explicit,
那么从源类型到目标类型的类型转换就必须显式完成,静态类型转换可用于这样的场合

2.动态类型转换

•dynamic_cast<目标类型> (源类型对象)

–编译器首先检查源类型和目标类型是否同为指针或引用且其类型之间存在具有多态性的继承关系,不存在直接报错

–编译器生成一段指令,运行时执行该指令,检查源和目标的类型是否一致,不一致通过返回空指针或抛出异常报错

–常被用于具有多态继承关系的父子类对象的指针或引用之间的转换

3.去常类型转换

•const_cast<目标类型> (源类型对象)

–编译器检查源类型和目标类型是否同为指针或引用,且其目标类型之间除常属性以外必须完全相同,否则直接报错

–去除指针或引用上的const属性

    int const volatile x = 100; 
    int const* p = &x; 
    *p = 200; // 错误 
    int* q = const_cast<int*> (p); 
    *q = 200;

4.重解释类型转换

•reinterpret_cast<目标类型> (源类型对象)

–编译器检查源类型和目标类型是否同为指针或引用,或者一个是指针一个是整型,否则直接报错

–在任意类型的指针或引用之间转换,意味着可以将同一个对象视作不同的类型,并以不同的方式访问或处理之

–无论何种类型的指针,从本质上讲都与整数无异,即地址空间中一个特定字节的顺序号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值