C++语法小记---异常处理
异常处理(C语言)
异常是对代码中可以预知的问题进行处理;代码中不可以预知的问题叫Bug;
if () { ... } else { ... }
setjmp和longjmp
#include <stdio.h>
#include <setjmp.h> jmp_buf env = {}; int divid(int a, int b)
{
if(b == )
{
longjmp(env, ); //2. 恢复保存的上下文,并设置setjmp的返回值(第二个参数)
}
else
{
return a / b;
}
} int main()
{
if(setjmp(env) == ) //1. 保存当前上下文,返回为0;
//3. 调用longjmp后,返回此处,返回值为longjmp设置的返回值
{
printf("divid(1, 0) = %d\n", divid(, ));
}
else
{
printf("Unexpected!!\n");
} return ;
}
异常处理(C++语言)
C++在语言层面提供异常的处理机制
异常的抛出和处理分开,更合理、灵活
try { ... } catch { ... }
使用throw关键字抛出异常,抛出的异常可以是任何类型,基础类型、类类型以及自定义类型都可以
异常抛出后,会沿着函数调用的顺序向上依次寻找捕捉的地方,如果找不到,程序终止;如果找到(匹配到catch),进入catch进行处理,程序不终止
一个try可以接续多个catch,catch的匹配规则如下:
每个异常只能被一个catch分支处理
匹配的过程从上至下依次匹配
匹配的规则类似函数调用的过程,但是不进行隐式类型转换,严格参数匹配
抛出的异常会有用于初始化catch中的参数
基类可以匹配子类的异常
不一定要使用C++库中提供的异常,可以使用自定义的异常
一般使用可变参数作为最后一个catch分支,做楼底处理
try { ... } catch { ... }可以嵌套,工程意义是对异常进行重新解释,做兼容处理
#include <iostream>
#include <string> using namespace std; void func() //嵌套,对异常进行重新封装解释
{
try
{
throw ;
}
catch(int i)
{
if(i == )
{
throw string("error no 2");
}
}
} int main()
{
try
{
throw ;
}
catch(int e)
{
cout<< "catch(int e)" << endl;
}
catch(...)
{
cout<< "catch(...)" <<endl;
} try
{
func();
}
catch(string e)
{
cout<< e <<endl;
} return ;
}
C++语法小记---异常处理的更多相关文章
- Jinja2语法小记
jinja2模板语法小记 Jinja2模板中文文档 三种常见界定符 表达式 {{ ... }} 用于装载字符串.变量.函数调用等 语句 {% ... %} 用于装载控制语句,比如if判断.for循环等 ...
- C++语法小记---开篇
几句闲话 由于C++的语法非常的复杂,但是实际使用的过程中,经常使用的语法也就那么一些,还有比较多的语法很少被使用,时间一长就容易忘记,因此“C++语法小记”主要是将C++中不经常使用和容易忘记的语法 ...
- Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础
本节内容: 1. 面向对象高级语法部分 1.1 静态方法.类方法.属性方法 1.2 类的特殊方法 1.3 反射 2. 异常处理 3. Socket开发基础 1. ...
- Java语法基础-异常处理
异常处理类层次结构图 检查异常与非检查异常 非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类.javac在编译时,不会提示和发现这 ...
- Python基本语法_异常处理详解
目录 目录 异常 异常类型 异常处理 触发异常raise 传递异常 assert语句触发异常 捕获异常tryexceptelse 捕捉多个异常 tryfinally语句 自定义异常 withas触发异 ...
- WINDOWS Server2008上部署Oracle10g及oracle SQL语法小记
首先安装10G客户端 情况一:一般都会安装到一般报错.因为10G是32BIT客户端.而操作系统是64位的.但是不会影响配置监听程序.自主开发的应用程序依然可以运行. 情况二:报错但是配置完监听程序始终 ...
- CSS语法小记
一.CSS语法结构 语法:选择符{属性:值} 例如:body{font-size:12px;} 参数说明: 1.选择符(Selector):指明这组样式所要针对的对象.可以是一个XHTML标签,例如h ...
- Object Pascal 语法之异常处理
http://www.cnblogs.com/spider518/archive/2010/12/30/1921298.html 3 结构化异常处理 结构化异常处理(SHE)是一种处理错误的手段,使得 ...
- Python 3语法小记(四)字典 dictionary
字典是Python里面一种无序存储结构,存储的是键值对 key - value.关键字应该为不可变类型,如字符串.整数.包含不可变对象的元组. 字典的创建很简单,用 d = {key1 : value ...
随机推荐
- Java将日期转化为大写格式(阿拉伯大写数字)
效果: 代码部分: public static void main(String[] args) { SimpleDateFormat sdf=new SimpleDateFormat("y ...
- SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8mb4_unicode_ci' is not valid for CHARACTER SET 'binary'
SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8mb4_unicode_ci' is not valid ...
- 输入url后浏览器干了些什么(详解)
输入url后浏览器干了些什么(详解) DNS(Domain Name System, 域名系统) 解析 DNS解析的过程就是寻找哪台机器上有你真正需要的资源过程.但你在浏览器张红输入一个地址时,例如: ...
- Python 偏函数用法全方位解析
Python的functools模块中有一种函数叫“偏函数”,自从接触它以来,发现确实是一个很有用且简单的函数,相信你看完这篇文章,你也有相见恨晚的感觉. 我们都知道,函数入参可以设置默认值来简化函数 ...
- java多线程并发执行demo,主线程阻塞
其中有四个知识点我单独罗列了出来,属于多线程编程中需要知道的知识: 知识点1:X,T为泛型,为什么要用泛型,泛型和Object的区别请看:https://www.cnblogs.com/xiaoxio ...
- NodeMCU手把手入门:配置NodeMCU ESP8266开发板环境及点亮LED灯
之前一直在玩树莓派,最近实验室买了些NodeMCU就想着玩一玩,没想到挺有意思的.其实树莓派能实现的功能,它大部分也可以,价格比派也便宜不少,舍不得买派的同学可以先买这个开发板玩一玩. 本文主要介绍了 ...
- 【贪心】Emergency Evacuation
题目 大致题意 把指定的人从同一出口送出车外,且同一位置不能同时有两个人,求所需的最短时间. 分析 第一感觉就是利用贪心思想解决问题,但是这道题的数据范围用模拟的话肯定是会爆掉的,所以这是不可取的.我 ...
- Ubuntu apt update卡在Connecting to security.ubuntu.com解决方法
Ubuntu操作系统运行apt update命令时会卡在Connecting to security.ubuntu.com,搭了梯子也无法解决 尝试了网络上的方法,如: https://blog.cs ...
- 深入理解JVM(③)Java模块化系统
前言 JDK9引入的Java模块化系统(Java Platform Module System ,JPMS)是 对Java技术的一次重要升级,除了像之前JAR包哪有充当代码的容器之外,还包括: 依赖其 ...
- 洛谷 P2298 【Mzc和男家丁的游戏 】
这道题还是挺水的,广搜模板题,注意一下细节就是了. :码代上上代码: #include <bits/stdc++.h> using namespace std; int n , m , s ...