在C++中,异常处理包括:

· throw表达式(throw expression) 异常检测部分使用throw表达式来表示它遇到了无法处理的问题。throw表达式抛出一个异常并把控制权转移到能处理该异常的最近的catch子句。

· try语句块(try block) 异常处理部分使用try语句块处理异常。try关键字后跟着一个块和多个catch子句。如果try语句块的代码throw了异常并且其中一个catch子句匹配该异常类型,则异常被该catch子句处理,否则,异常将由外围try(try语句块可以调用包含另一个try语句块的函数)  处理,或者调用标准库的terminate函数终止当前程序。

· 一套异常类(exception class) 用于在throw表达式和相关的catch子句之间传递异常的具体信息。

if(a != b)
throw runtime_error("Data must refer to same value");

上面的代码就是如果a和b不相等时,就抛出一个异常,该异常是类型runtime_error的对象。抛出异常将终止当前的函数,并把控制权转移给能处理该异常的代码。

int a, b;
while(cin >> a >> b){
try{
if(a != b)
throw runtime_error("Data must refer to same value");
}catch(runtime_error err){
cout << err.what() << "\nTry Again? Enter y or n" << endl;
char c;
cin >> c;
if(!cin || c == 'n') break;
}
}

上面的代码中,try语句块中如果判断a与b不相等,就抛出一个runtime_error类型的异常,try语句块后有一个与之相对应的catch语句,那么就会执行该catch语句来处理异常。

what函数返回值是一个指向C风格字符串的const char*。what函数返回的C风格字符串的内容与异常对象的类型有关。如果异常类型有一个字符串初始值,则what返回该字符串。对于其他吴初始值的异常类型来说,what返回的内容由编译器决定。

关于标准异常

C++标准库定义了一组类,用于报告标准库函数遇到的问题。这些异常类也可以在用户编写的程序中使用,它们分别定义在4个头文件中:

· exception头文件定义了最通用的异常类exception。它只报告异常的发生,不提供任何额外信息。

· stdexcept头文件定义了几种常用的异常类。

· new头文件定义了bad_alloc异常类型。

· type_info头文件定义了bad_cast异常类型。

以上图片摘自qingdujun的博客:https://blog.csdn.net/qingdujun/article/details/75195061

try语句块和异常处理的更多相关文章

  1. 【c++ primer, 5e】【try语句块】

    p172~p177:c++的try语句块和异常处理: 1.通常,与用户交互的代码和对象相加(底层的代码)是分离开的,异常由与用户交互的代码处理(底层代码抛出异常就可以了). 2.C++的runtime ...

  2. java中 在一个异常处理中什么语句块是可多个的

    MM们 异常处理一般格式:捕获异常:try{//代码块}catch(异常类型,例如:Exception e){//需要抛出的异常,例如:e.printStackTrace();}catch(异常类型) ...

  3. Python中else语句块(和if、while、for、try搭配使用)

    学过C/C++的都知道,else语句是和if语句搭配使用的, 但是在Python中,else语句更像是作为一个模块,不仅仅可以和if语句搭配,还可以和循环语句,异常处理语句搭配使用.下面逐个进行介绍: ...

  4. 左右 Java 于 finally 深度分析语句块

    首先,让我们来问你一个问题:finally 声明块将运行? 很多人认为 finally 语句块是一定要运行.其中还包括了一些非常有经验的 Java 程序猿.不幸的是,没有像很多像人们想象,对于这个问题 ...

  5. try...catch...finally语句块

    try-catch-finally语句主要是用来处理检查异常,捕获并处理,以及最后必须要执行的finally块. try-catch-finally语句入门: 1.try-catch-finally语 ...

  6. 线程系列07,使用lock语句块或Interlocked类型方法保证自增变量的数据同步

    假设多个线程共享一个静态变量,如果让每个线程都执行相同的方法每次让静态变量自增1,这样的做法线程安全吗?能保证自增变量数据同步吗?本篇体验使用lock语句块和Interlocked类型方法保证自增变量 ...

  7. .NET基础 一步步 一幕幕[循环、逻辑语句块]

    循环.逻辑语句块   好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...

  8. static{ }语句块详解

    static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法.举ge例子: public class Test { public static i ...

  9. begin-end语句块在mysql中的使用问题

    在最近在通过navicate连接mysql数据库时,进行查询操作: delimiter $$BEGIN SET @a=1; if (@a > 0) THEN SELECT COUNT(*) fr ...

随机推荐

  1. loadrunner录制时web时,ie报安全证书问题

    解决方法:在Recording_Options下Port Mapping>Capture level设置为 WinNet level data Capture Level的设置说明:1.Sock ...

  2. jQuery中deferred对象的使用(二)

    接上一回的内容,漏了一个always()方法,参数也是回调函数,与done和fail不同的是,无论任何情况都执行always方法中的回调. deferred对象的使用(二) deferred对象不光可 ...

  3. Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺

    更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...

  4. $_SERVER['HTTP_REFERER']

    $_SERVER['HTTP_REFERER']//获取前一个页面的url地址

  5. openpose 问题

    I ran into the above issue causing a core dump after compiling what I believe was successful without ...

  6. Sql的行列转换

    创建表scores 一.传统的行列转换 纵表转横表 我们要转成的横表是这样子的: pivot是sql server 2005 提供的运算符,所以只要数据库在05版本以上的都可以使用.主要用于行和列的转 ...

  7. exp,expdb,imp,impdb的使用

    1.使用expdp要先在数据库中创建directory,并给相应的用户read,write权限. SQL>create dexp和empdp的区别irectory dmpdir as ‘/u01 ...

  8. C# 订单号的生成

    /**        * 根据当前系统时间加随机序列来生成订单号         * @return 订单号        */        public static string Generat ...

  9. 试题 A: 组队 蓝桥杯

    试题 A: 组队本题总分: 5 分[问题描述]作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容.每位球员担任 1 号位至 5 号位时的评分如下表所示.请你计算 ...

  10. Netty 断线重连解决方案

    http://www.spring4all.com/article/889 本篇文章是Netty专题的第七篇,前面六篇文章如下: 高性能NIO框架Netty入门篇 高性能NIO框架Netty-对象传输 ...