解析C++编程中的bad_cast异常

 更新时间:2016年01月15日 16:14:55   投稿:goldensun  
这篇文章主要介绍了C++编程中的bad_cast异常,bad_cast异常通常出现于表达式中类型转换错误时等一些场景,需要的朋友可以参考下

由于强制转换为引用类型失败,dynamic_cast 运算符引发 bad_cast 异常。
语法

catch (bad_cast)
  statement

备注
bad_cast 的接口为:

class bad_cast : public exception {
public:
  bad_cast(const char * _Message = "bad cast");
  bad_cast(const bad_cast &);
  virtual ~bad_cast();
};

以下代码包含失败的 dynamic_cast 引发 bad_cast 异常的示例。

// expre_bad_cast_Exception.cpp
// compile with: /EHsc /GR
#include <typeinfo.h>
#include <iostream>

class Shape {
public:
  virtual void virtualfunc() const {}
};

class Circle: public Shape {
public:
  virtual void virtualfunc() const {}
};

using namespace std;
int main() {
  Shape shape_instance;
  Shape& ref_shape = shape_instance;
  try {
   Circle& ref_circle = dynamic_cast<Circle&>(ref_shape); 
  }
  catch (bad_cast b) {
   cout << "Caught: " << b.what();
  }
}

由于强制转换的对象 (Shape) 不是派生自指定的强制转换类型 (Circle),因此引发异常。若要避免此异常,请将下列声明添加到 main:

Circle circle_instance;
Circle& ref_circle = circle_instance;

然后在 try 块中反转强制转换的意义,如下所示:

Shape& ref_shape = dynamic_cast<Shape&>(ref_circle);

相关文章

  • Sersync+Rsync实现触发式文件同步实战过程

    Sersync+Rsync实现触发式文件同步实战过程

    sersync是使用c++编写,而且对linux系统文 件系统产生的临时文件和重复的文件操作进行过滤。下面通过本文给大家分享Sersync+Rsync实现触发式文件同步实战过程,需要的朋友参考下吧
    2017-09-09
  • c++如何控制对象的创建方式(禁止创建栈对象or堆对象)和创建的数量

    c++如何控制对象的创建方式(禁止创建栈对象or堆对象)和创建的数量

    这篇文章主要介绍了c++如何控制对象的创建方式和创建的数量,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • C语言多媒体框架GStreamer入门和概述

    C语言多媒体框架GStreamer入门和概述

    这篇文章主要介绍了C语言多媒体开源框架GStreamer,本文总结了多媒体框架GStreamer一些基本概念及流程,希望能给使用GStreamer开源库的朋友提供一个借鉴或参考,需要的朋友可以参考下
    2022-07-07
  • VSCode搭建STM32开发环境的实现步骤

    VSCode搭建STM32开发环境的实现步骤

    因为VSCode免费且好用,可以安装各种插件,本文主要介绍了VSCode搭建STM32开发环境的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • C语言二叉树常见操作详解【前序,中序,后序,层次遍历及非递归查找,统计个数,比较,求深度】

    C语言二叉树常见操作详解【前序,中序,后序,层次遍历及非递归查找,统计个数,比较,求深度】

    这篇文章主要介绍了C语言二叉树常见操作,结合实例形式详细分析了基于C语言的二叉树前序,中序,后序,层次遍历及非递归查找,统计个数,比较,求深度等相关操作技巧与注意事项,需要的朋友可以参考下
    2018-04-04
  • C++的函数与指针

    C++的函数与指针

    今天小编就为大家分享一篇关于C++函数与指针的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-10-10
  • zlib库压缩和解压字符串STL string的实例详解

    zlib库压缩和解压字符串STL string的实例详解

    这篇文章主要介绍了zlib库压缩和解压字符串STL string的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10
  • C语言调用摄像头实现生成yuv未压缩图片

    C语言调用摄像头实现生成yuv未压缩图片

    这篇文章主要为大家详细介绍了C语言如何调用摄像头实现生成yuv未压缩图片,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以参考一下
    2023-11-11
  • Qt6子窗口全屏显示的实现示例

    Qt6子窗口全屏显示的实现示例

    在Qt开发中,有时候需要让程序窗口全屏显示,本文主要介绍了Qt6子窗口全屏显示的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • C++ 超全面讲解多态

    C++ 超全面讲解多态

    这篇文章主要介绍了C++多态的原理与实现,多态是一种面向对象的设计思路,本身和C++不是强绑定的,其他语言当中一样有多态,只不过实现的方式可能有所不同。下面来一起了解更多详细内容吧
    2022-04-04

最新评论