强制类型转换static_cast和dynamic_cast

参考资料:https://www.cnblogs.com/chenyangchun/p/6795923.html

上面这个链接里详细说明了这两种强制类型转换和另外两种强制类型转换const_cast、reinterpret_cast,总结起来就是,static_cast是静态的类型转换,缺少了类型安全检查,不推荐使用,dynamic_cast则有类型安全检查,使用更安全。另外两种强制类型转换没使用过,不知道效果。

bool CSnapWidget::eventFilter(QObject *obj, QEvent *ev)
{
    /*
    */
    QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(ev);    /// 不安全,会产生异常
    if (NULL == mouseEvent)
    {
        return false;
    }
    /*
    */
}

上图是某个自己封装的截图功能,在鼠标拖动复选截图时,会在上图这个代码位置报错,异常导致程序崩溃,调试发现,就是指针mousEevent转换失败,期间尝试过加锁,但异常依旧,然后网上搜索强制类型转换的相关资料,使用dynamic_cast解决了问题。

bool CSnapWidget::eventFilter(QObject *obj, QEvent *ev)
{
    /*
    */
    QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(ev);    /// 有类型安全检查,更安全
    if (NULL == mouseEvent)
    {
        return false;
    }
    /*
    */
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值