史上最简单的c++四种cast使用教程

本文深入探讨了C++中各种类型转换方式的使用场景及潜在风险,并提供了实用建议。从const_cast到dynamic_cast,每种转换都有其适用场合与限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    就两个字:别用。如果一定要类型转换呢?那就用c-style的cast吧。如果你只是想看使用方法,看到这就可以了。下面是说明。
   
    c++圣经《TC++PL》说使用c++四种cast比c-style的cast更安全。其实我觉得没多大差别。想象下:你正在用明火焊接一个充满C4炸弹的鱼雷(类型转换危险但是又必要),这时候你是否叼着烟其实对你能否survive影响不大,细心谨慎+拜拜大神才是正道。
    具体分析:
    const_cast,用于把const类型转换成对应非const类型,问题来了,你为啥这么做?告诉大家骗子很多不要轻信他人?如果发现需要用const_cast的情况一般是正在写一个函数A,入参是const,但需要调用非const入参的函数B。仔细分析一番:1)B不符合const入参语义,显然A的入参有误,改成非const入参;2)B可以修改且其符合const入参语义,这种情况以其用const_cast,不如把B的入参加上const修饰;3)B不能修改且其符合const入参语义,这种情况下似乎必须用const_cast了,但这种情况下B一般是由其他库提供,去假定其他库的实现(说不定其他库会升级)并不是个好主意,建议顺序:修改A入参->使用复制的入参调用B->const_cast。
    reinpreter_cast,这玩意和c-style cast没有任何区别。
    static_cast,类似带编译时检验的c-style cast,编译器隐式执行的任何类型转换都可由static_cast显示完成。所以的确比c-style cast安全一点,效率上也没差别。但如果以为static_cast就是安全的转换则大谬,这个只能由程序员来保证。
    dynamic_cast,用在父类与子类指针间互相转换,被认为是最安全也最昂贵的转换,进行类型检查,转换失败时返回NULL。问题是设计良好的OO代码不会逼着人做这种事情,我还没见过正经OO代码不得不用它的,多态才是正常做法。
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值