目录
前言:
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();

最低0.47元/天 解锁文章
5062

被折叠的 条评论
为什么被折叠?



