C++算法学习——预备知识(5)——异常处理(2)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

C ++标准库提供了一个专门用于声明要抛出的对象作为异常的基类。它被称为exception,并在命名空间std下的< exception>头文件中定义。这个类有通常的默认和复制构造函数,运算符和析构函数,以及一个额外的虚拟成员函数,称为返回一个空值终止的字符序列(char *),并且可以在派生类中覆盖,以包含某种描述.

// standard exceptions
#include <iostream>
#include <exception>
using namespace std;

class myexception: public exception
{
  virtual const char* what() const throw()
  {
    return "My exception happened";
  }
} myex;

int main () {
  try
  {
    throw myex;
  }
  catch (exception& e)
  {
    cout << e.what() << endl;
  }
  return 0;
}

我们已经放置了一个通过引用捕获异常对象的处理程序(注意和符号和类型之后),因此它也捕获从异常派生的类,就像myexex的myex对象一样。
在这里,what() 是异常类提供的一个公共方法,它已被所有子异常类重载。这将返回异常产生的原因
C ++标准库的组件抛出的所有异常都会抛出从此std :: exception类派生的异常。这些是:

异常描述
std::bad_alloc该异常可以通过 new 抛出。
std::exception该异常是所有标准 C++ 异常的父类。
std::bad_typeid该异常可以通过 typeid 抛出。
ios_base::failure该异常可以通过 iostream的库函数抛出

例如,如果我们使用操作符 new并且不能分配内存,则抛出类型为bad_alloc的异常:

try
{
  int * myarray= new int[1000];
}
catch (bad_alloc&)
{
  cout << "Error allocating memory." << endl;
}

建议将所有动态内存分配包含在一个try块中,捕获这种类型的异常以执行一个干净的动作,而不是异常的程序终止,这是当这种类型的异常被抛出并没有被捕获时会发生什么。 如果你想强制执行一个bad_alloc异常来查看它的行为,你可以尝试分配一个巨大的数组; 在我的系统上,试图分配10亿个int,抛出一个bad_alloc异常。

因为bad_alloc是从标准基类异常导出的,所以我们可以通过捕获对异常类的引用来处理同一个异常:

// bad_alloc standard exception
#include <iostream>
#include <exception>
using namespace std;

int main () {
  try
  {
    int* myarray= new int[1000];
  }
  catch (exception& e)
  {
    cout << "Standard exception: " << e.what() << endl;
  }
  return 0;
}
Robomaster视觉教程(一)谈谈搞视觉应该会的C++知识 以下基本上是视觉入门opencv学习的最低标准,毕竟之后主要要讲的是计算机视觉方面的东西,其中的概念只是点到为止,希望大家可以将模糊的概念百度一下,最好也能总结一下,C++学习是基础中的基础,笔者会不定期更新和完善。(其中带*的内容为可选学内容) 一、预备知识(不分先后) 了解C++标准(C99、C11等)(视觉新手经常会遇到的错误往往不是opencv的,而是不熟悉IDE或者C++标准版本所致) 多文件编程(RM视觉部分的代码量也可以算是一个小项目,我们一般创建一个工程,在工程中使用头文件和源文件配合编 阅读详情

相关推荐

C++】从代码示例入手(一)预备知识

每一个代码示例都有详细的解释和注释,让你能轻松理解代码的功能和运行原理,助你逐步掌握 C++的编程技巧,快速提升编程能力,为后续深入学习和开发打下坚实基础。《C++从代码示例入手》系列文章将带你开启 C++编程的探索之旅。,由浅入深地展现 C++的核心知识点,

超越的博客 739

html5语言js效果,js实现鼠标点击效果(html5)

【实例简介】【实例截图】【核心代码】鼠标点击效果body {background: #F8F4E3;}.message {position: fixed;width: 80%;text-align: center;top: 50%;left: 50%;-webkit-transform: translateX(-50%) translateY(-50%);transform: translateX...

weixin_29032489的博客 707

如何系统学习Java

在整个学习过程中,不断练习编程、阅读源码、参与开源项目、解决问题,这些都是提升编程技能的关键环节。同时,积极参与技术社区、博客、论坛的讨论,分享自己的学习心得和经验,也能加速成长。

qq_64272186的博客 926

html点击小图轮播图,HTML5图片轮播点击效果

废话不多说,上代码!网站格式源码body{background-color:#2E2E2E;margin:0;overflow:hidden;}.lanren-header{color:#fff;}#info{color:white;font-family:monospace;}canvas{position:absolute;backface-visibility:hidden;-webkit-...

weixin_31240135的博客 837

背景星空

HTML: 插件链接:https://pan.baidu.com/s/1pmILNinUKoGXb1EC0xOj1Q 提取密码:kamw &lt;div class="stars"&gt; &lt;/div&gt; CSS: body { background: radial-gradient(200% 100% at bottom center, #007...

蜗牛小前的博客 845

bootstrap拖动div_Bootstrap 用于分步演示的移动触摸滑块栏

HTML导入代码模板:var sliderChanged = function (changeObj) {var selector = 0;var callouts = ['.callout-one','.callout-two','.callout-three','.callout-four'];var newVal = changeObj.value.newValue;var modulus ...

weixin_39866874的博客 385

prototype鼠标指针_html5鼠标点击页面光标圆点动画特效

特效描述:html5 鼠标点击页面 光标圆点动画特效。html5圆点动画,光标动画,鼠标点击页面事件。代码结构1. 引入JS2. HTML代码点击任何地方看效果'use strict';var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) {if (wind...

weixin_29816689的博客 872

1 C++ 学习预备知识

C++预备知识

South_Rosefinch的博客 1572

C++ Primer Plus 第1章 预备知识

Preface: 学习 C++ 是一次探索之旅,因为这种语言容纳了好几种编程范式,其中包括面向对象编程、泛型编程和传统的过程化编程。 为了系统地学习 C++ ,特鼓励自己坚持写此博客,博文会不断更新,若有不当或问题之处,望各位博友及时提出及指正。本书(或称本系列博客)讲述了 C++ 在 C 语言的基础上新增的很多特性 :类和对象 继承 多态、虚函数和 RTTI(运行阶段类型识别) 函数重载 引用变量

PzLu's Blog 533

C++算法学习——预备知识(4)——异常处理(1)

异常Exceptions)异常提供了一种通过将控制转移到名为处理程序的特殊功能来对我们程序中异常情况(如运行时错误)做出反应的方法。 要捕获异常,我们必须将一部分代码放在异常检查下。 这是通过将该部分代码包含在try块中来完成的。 当该块中出现异常情况时,抛出异常,将异常处理程序传递给控件。如果没有抛出异常,代码将继续正常运行,所有处理程序都将被忽略。 使用try块内的throw关键字抛出异常

redAnt的博客 999

【CUDA高级开发者学习路线图】预备知识模块

下面给出一套:让你可以直接复制粘贴运行,看到每一步的细节与性能差异,并能自行扩展。

u012133341的博客 144

C++ Primer》(第5版)学习笔记(一)预备知识

学习笔记

weixin_41488105的博客 334

学习c/c++ 推荐学习什么书籍?

学习编程包含以下几个重要方面: 了解语言的语法 知道那些特性可以使用和何时使用 写出可读性好的代码 编译器可以理解,但是下一个人是否可以阅读呢? 在一个更高层次设计结构良好的程序 为了学习一门语言,通常我们可以找到叫《X语言编程》的书。这也形成了一个潜规则:当你创建一门严肃的语言的时候,你需要编写这样一本书。学习语言有点像学习作文,但这并不意味着你能够突然变成一个著名散文作家! 对于C++...

qq_42289041的博客 1万+

C++ primer plus 学习历程

C++ primer plus 学习历程 该书一共18章和10个附录 本系列的帖子主要记录 C++ Primr Plus(第6版)中文版书籍学习成果 第一章:预备知识 第二章:开始学习C++ 第三章:处理数据 第四章:符合类型 第五章:循环语句和关系表达式 第六章:分支语句和逻辑运算符 第七章:函数C++的编程模块 第八章:函数探幽 第九章:内存模型和名称空间 第十章:对象和类 第十一章:实...

weixin_43200844的博客 528

JavaSE学习——预备知识

JavaSE 本套学习笔记特别感谢狂神说Java 主要内容依据狂神说Java总结而成 Java学习预备知识 Java的诞生 C&C++ C语言(1972) 贴近硬件,运行极块,效率极高 操作系统、编译器、数据库、网络系统等 问题:指针与内存管理 C++(1982) 面向对象 兼容C语言 图形领域、游戏等 Java 1995年网页简单而粗糙,缺乏互动性 图形界面的程序(Applet) Java的分类 JavaSE(标准版) 占领桌面 JavaME(移动版) 占领手机 JavaEE(

NightFa1l的博客 278

CUDA 高级开发者学习路线图

【代码】CUDA 高级开发者学习路线图。

u012133341的博客 2059

C++记录本人学习博客-汇总----一步步完善自己的知识体系

1、C++系统学习路径博客记录 1)C++学习-1(各种编译器,以及qt下使用qmake,cmake,linux下使用cmake管理) 2C++学习 -2 namespace大全 3)C++学习 -3 C和C++的混合编程及库的调用 4)C++学习 -4 查询C++标准库写应用层代码以filestream【缺少对标准库的解析】 5C++学习-5 普查所有C++关键词对其全面了解(2万长文配合诸多案例进行讲解) 目前正在总结C++面向对象相关知识的总结,后面还有模板泛型相关的 2C++项目源码介绍 1)

zw1996的博客 597

C++课程基础语法小结

前言 每个人的记忆是有限的,学过的东西很快就会遗忘,因此,在即将升大二之际,对大一学习C++的基础语法进行整理归纳,并附上一年里写过的一些重要代码,方便今后回顾! 声明:本文参考教材提供的网络学习资料(非常感谢,网址已注明),代码为博主本人大一时自己写的代码(作业、实验报告的题目),本人水平有限,代码不一定完美,欢迎帮忙指正!!! 教材 C++程序设计基础(第5版)(上) 附带学习网站...

浅若清风cyf的博客 1073

「JavaSE」-预备知识

计算机语言发展史 机器语言 基本计算方式基于二进制方式 直接输入给计算机使用 汇编语言 解决人类无法读懂机器语言的问题 指令代替二进制 目前应用 逆向工程 机器人 病毒 ...... 高级语言 大体上分为:面向过程 和 面向对象 两大类 C语言史典型的面向过程的语言 C++、Java是典型的面向对象的语言 故事:Java帝国的诞生 C&C++ 1972年C诞生 贴近硬件,运行极快,效率极高。 操作系统,编译器,数据库,网络系统等。 指针和

WangJinDL的博客 2996
上一篇: C++算法学习——预备知识(4)——异常处理(1)
下一篇: C++算法学习——经典的抽象设计——charstack(1)
gzhosp_redAnt
博客等级 码龄10年 702粉丝 269原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值