C++中的异常处理(上)
C++内置了异常处理的语法元素try... catch ...
-try语句处理正常代码逻辑
-catch语句处理异常情况
-try语句中的异常由对应的catch语句处理
try
{
double r = divide(,);
}
catch(...)
{
cout << "Divided by zero..." << endl;
}
C++通过throw语句抛出异常信息
double divide(double a, double b)
{
const double delta = 0.000000000000001;
double ret = ; if( !((-delta < b) && (b < delta)) )
{
ret = a / b;
}
else
{
throw ; //产生除0异常
} return ret;
}
C++异常处理分析
-throw抛出的异常必须被catch处理
当前函数能够处理异常,程序继续往下执行
当前函数无法处理异常,则函数停止执行,并返回
未被处理的异常会顺着函数调用栈向上传播,直到被处理为止,否则程序将停止执行

当产生异常后,先看function3这个函数有没有能力处理,此时是没有能力处理的。于是function3这个函数就会立即停止执行,并且带着
异常返回function2的调用点,此时function2也没有能力处理,会立刻停止,并且带着这个异常返回到它的调用点function1中。
#include <iostream>
#include <string> using namespace std; double divide(double a, double b)
{
const double delta = 0.000000000000001;
double ret = ; if( !((-delta < b) && (b < delta)) )
{
ret = a / b;
}
else
{
throw ;
} return ret;
} int main(int argc, char *argv[])
{
try
{
double r = divide(, ); cout << "r = " << r << endl;
}
catch(...)
{
cout << "Divided by zero..." << endl;
} return ;
}
同一个try语句可以跟上多个catch语句
-catch语句可以定义具体处理的异常类型
-不同类型的异常由不同的catch语句具体负责
-try语句中可以抛出任何类型的异常
-catch(...)用于处理所有类型的异常
-任何异常都只能被捕获(catch)一次

异常类型匹配
#include <iostream>
#include <string> using namespace std; void Demo1()
{
try
{
throw 'c';
}
catch(char c)
{
cout << "catch(char c)" << endl;
}
catch(short c)
{
cout << "catch(short c)" << endl;
}
catch(double c)
{
cout << "catch(double c)" << endl;
}
catch(...)
{
cout << "catch(...)" << endl;
}
} void Demo2()
{
throw string("D.T.Software");
} int main(int argc, char *argv[])
{
Demo1(); try
{
Demo2();
}
catch(char* s)
{
cout << "catch(char *s)" << endl;
}
catch(const char* cs)
{
cout << "catch(const char *cs)" << endl;
}
catch(string ss)
{
cout << "catch(string ss)" << endl;
} return ;
}

小结:
C++中直接支持异常处理的概念
try...catch...是C++中异常处理的专用语句
try语句处理正常代码逻辑,catch语句处理异常情况
同一个try语句可以跟上多个catch语句
异常处理必须严格匹配,不进行任何的类型转换
C++中的异常处理(上)的更多相关文章
- 关于C#中async/await中的异常处理(上)-(转载)
在同步编程中,一旦出现错误就会抛出异常,我们可以使用try…catch来捕捉异常,而未被捕获的异常则会不断向上传递,形成一个简单而统一的错误处理机制.不过对于异步编程来说,异常处理一直是件麻烦的事情, ...
- 关于C#中async/await中的异常处理(上)
关于C#中async/await中的异常处理(上) 2012-04-11 09:15 by 老赵, 17919 visits 在同步编程中,一旦出现错误就会抛出异常,我们可以使用try…catch来捕 ...
- 【repost】JS中的异常处理方法分享
我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要 ...
- java 中的异常处理
一. 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误.本文主要讲授的是Java语言的异常处理.Java语言的异常处理框架, 是Java语言健壮性的一个重要体现. Java把 ...
- Delphi中的异常处理(10种异常来源、处理、精确处理)
一.异常的来源 在Delphi应用程序中,下列的情况都比较有可能产生异常. 1.文件处理 2.内存分配 3.windows资源 4.运行时创建对象和窗体 5.硬件和操作系统冲突 6.网络问题 7.数据 ...
- 【ASP.NET Web API教程】4.3 ASP.NET Web API中的异常处理
原文:[ASP.NET Web API教程]4.3 ASP.NET Web API中的异常处理 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内 ...
- T-SQL编程中的异常处理-异常捕获(catch)与抛出异常(throw)
本文出处: http://www.cnblogs.com/wy123/p/6743515.html T-SQL编程与应用程序一样,都有异常处理机制,比如异常的捕获与异常的抛出,本文简单介绍异常捕获与异 ...
- web应用中的异常处理
楼主前几天写了一篇“Java子线程中的异常处理(通用)”文章,介绍了在多线程环境下3种通用的异常处理方法. 但是平时大家的工作一般是基于开发框架进行的(比如Spring MVC,或Spring Boo ...
- C#多线程中的异常处理
常规Thread中处理异常 使用Thread创建的子线程,需要在委托中捕捉,无法在上下文线程中捕捉 static void Main(string[] args) { ThreadStart thre ...
随机推荐
- 纸壳CMS现已支持自定义扩展字段
简介 纸壳CMS是开源免费的可视化内容管理系统. GitHub https://github.com/SeriaWei/ZKEACMS 自定义字段 纸壳CMS现已支持自定义字段,在不修改代码的情况下, ...
- 服务器安装neo4j
neo4j是目前最流行的图形数据库,支持完整的事务.在树形图中,图是有顶点.边和属性组成的,顶点和边都可以设置属性,顶点又称节点,边也叫做关系.每个节点和关系都可以有一个或多个属性,neo4j创建的图 ...
- Linux-3.14.12内存管理笔记【构建内存管理框架(4)】
虽说前文分析内存管理框架构建的实现,提到了find_zone_movable_pfns_for_nodes(),但这里不准备复述什么,仅针对required_movablecore和required_ ...
- React 以两种形式去创建组件 类或者函数(二)
08==>创建组件以 1类的形式 或者以 2函数的形式 09==>使用组件 在src下创建components文件夹 是放组件的 CompType.js 组件 组件开头大写(重要) Com ...
- luoguP4022 [CTSC2012]熟悉的文章
题意 显然这个\(L\)是可以二分的,我们只需要判断\(L\)是否合法即可. 显然有一个\(O(n^2)\)的DP: 设\(f_i\)表示当前匹配到\(i\)的最大匹配长度. \(f_i=max(f_ ...
- 【51nod1678】lyk与gcd(莫比乌斯反演+枚举因数)
点此看题面 大致题意: 一个长度为\(n\)的数组,实现两种操作:单点修改,给定\(i\)求\(\sum_{j=1}^na_j[gcd(i,j)=1]\). 莫比乌斯反演 考虑推一推询问操作的式子: ...
- celery定时器
Celery 1.什么是Clelery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery架构 Celery的架构由三部分组 ...
- 通过ES6 Module看import和require区别
前言 说到import和require,大家平时开发中一定不少见,尤其是需要前端工程化的项目现在都已经离不开node了,在node环境下这两者都是大量存在的,大体上来说他们都是为了实现JS代码的模块化 ...
- 21个Java Collections面试问答
Java Collections框架是Java编程语言的核心API之一. 这是Java面试问题的重要主题之一.在这里,我列出了一些重要的Java集合面试问题和解答,以帮助您进行面试.这直接来自我14年 ...
- 【文本处理命令】之awk命令详解
一.awk命令简介 awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等.在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将 ...