C++_异常

       

目录

1、异常的关键字

2、异常的写法

3、异常的使用规则

3.1 规则1

3.2 规则2

3.3 规则3 

3.4 规则4

3.5 规则5 

4、异常的重新抛出 

5、异常的规范 

5.1 C++98的异常规范

5.2 C++11的异常规范

6、C++标准库的异常体系

7、异常的优缺点

结语 


前言:

        C++的异常是一种处理程序bug的方式,如今面向对象的语言基本都是用异常处理错误的,因为他可以帮助程序员快速定位错误的根源。当一个函数或者是一段代码发现了自己处理不了的错误就可以将该错误抛出,又称异常抛出,由外部的调用者或间接调用者捕获该错误,又称异常捕获

1、异常的关键字

         若要使用异常则需要用到三个关键字:try、throw、catch。他们的具体用法如下:

        try:try有属于自己的作用域,在他的作用域中存放可能会抛出异常的代码或者函数。

        throw:throw有着“抛出”的动作,throw后面跟一段内容,当程序出现错误时,throw会抛出其后面的内容(即抛出异常),作为错误的描述,通常throw后面跟一段字符串作为错误描述。

        catch:catch是捕获的意思,并且他只能捕获try里面代码的异常。当throw抛出了异常,那么就需要catch捕获该异常,不过要先捕获该异常,catch的捕获类型必须与throw抛出内容的类型一致才可以捕获。(具体看下文举例)

2、异常的写法

        异常的代码格式如下:

try
{
  // 可能会抛异常的代码
}catch( type e1 )//抛出的异常用形参e1捕获
{
  // 通常对e1的内容进行打印
}catch( type e2 )//可以有不同的捕获类型
{
  // 如上
}catch( type en )
{
  // 如上
}

        举例说明:

#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
using namespace std;

int main()
{
	try
	{
		int a;
		cin >> a;
		if(a < 0)//如果输入的a小于0说明发生错误
		throw "a为负数发生错误";//抛异常:a为负数发生错误(类型是char*)
	}
	catch (const char* str)//因为抛出的因此类型是字符串,因此可以用char*接收
	{
		cout << str << endl;//打印异常的错误
	}
	return 0;
}

         运行结果:

3、异常的使用规则

3.1 规则1

        抛出异常和捕获异常的类型必须匹配,否则是捕获不了该异常的,若不匹配先会去找其他的catch能否类型匹配,若没找到则说明抛出的异常没有对应的捕获类型,则会报错。

        示例如下图:

3.2 规则2

        抛出的异常会被离该异常最近位置的catch捕获(前提是该catch与异常类型匹配),示例代码如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
using namespace std;

void _func()
{
	int a = -2;
	if (a < 0)//如果输入的a小于0说明发生错误
		throw "a为负数发生错误";//抛异常:a为负数发生错误
}

void func()
{
	try
	{
		_func();//复用
	}
	catch (const char* str)//func函数的捕获
	{
		cout << "void func():" << str << endl;//打印异常的错误
	}
}

int main()
{
	try
	{
		func();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安权_code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值