c++try语句块和异常处理

异常处理包括:

1、throw表达式:异常检测部分使用throw表达式来表示它遇到了无法处理的问题,我们说,throw引发了异常

2、try语句块:异常处理部分使用try语句块处理异常。try语句块以关键字try开始,并以一个或多个catch子句结束,try语句块中的代码抛出的异常通常会被某个catch子句处理、

3、异常类:用于throw表达式和相关的catch子句之间传递异常的具体信息

一、throw表达式

1、throw表达式包含关键字throw和紧随其后的一个表达式,表达式的类型就是抛出的异常类型

2、如下的异常是类型runtime_error的对象,我们必须用字符串初始化这个对象,字符串是关于异常的辅助信息

if (i > maxn)
{
	throw runtime_error("下标");    //运行到此处程序报错
}

二、try语句块

1、try语句块的语法形式如下,其执行过程:执行try块内语句,直到遇到throw语句抛出异常,然后退出try块去寻找catch子句中的异常,如果没有那么执行最后一个catch语句,catch完成后程序跳转到try语句块最后一个catch子句之后的那条语句继续执行

2、try语句块的大括号不可省略

try
{
	//......
	if (a > b)
		throw runtime_error("big");
	if (a == b)
		throw exception("same");
}
catch(runtime_error)
{
	cout << "big";
}
catch (exception)
{
	cout << "equal";
}
//catch......

3、函数在寻找处理代码过程中退出:

一个try语句块中可能调用了另一个包含try语句块的函数,而这个新的try语句块可能调用了包含另一个try语句的函数,以此类推(从外向内递归)

而在寻找处理代码的过程与函数调用链刚好相反,异常抛出时优先搜索抛出该异常的函数如果没找到匹配的catch子句,终止该函数并在调用函数的函数中寻找(从内向外递归)

如果最终还是没能找到任何匹配的catch子句,程序转到名为terminate的标准库函数,执行该函数将导致程序非正常退出

三、标准异常

1、c++标准库定义了一组类,用于报告标准库函数遇到的问题:

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

(2)、stdexcept中定义的异常类

exception最常见的问题
runtime_error只有在运行时才能检测出的问题
range_error运行时错误:生成的结果超出了有意义的值域范围
overflow_error运行时错误:计算上溢
underflow_error运行时错误:计算下溢
logic_error程序逻辑错误
domain_error逻辑错误:参数对应的结果值不存在
invalid_argument逻辑错误:无效参数
length_error逻辑错误:试图创建一个超出该类型最大长度的对象
out_of_range逻辑错误:使用一个超出有效范围的值

(3)、new头文件定义了bad_alloc异常类型

(4)、type_info头文件定义了bad_cast异常类型

2、异常类型只定义了一个名为what的成员函数,该函数无参数,返回值是一个指向c风格字符串的const char*

try
{
	if (a > b)
		throw runtime_error("good");
}
catch (runtime_error& error)
{
	cout << error.what();
}

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值