c++中的异常——c++

本文详细介绍了C++中的异常处理机制,包括抛出异常、捕获异常的基本操作,以及栈解旋的过程。同时,讨论了自定义异常类的方法,强调了异常接口声明和异常变量的生命周期。此外,还探讨了异常的多态性和C++标准异常库的使用,以及如何编写自己的异常类。通过对这些概念的深入理解,读者能够更好地掌握C++中的错误处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常


在c语言中,对错误的处理总是两种方法:

1,使用整型的返回值表示错误(有时候用1表示正确,0表示错误;有的时候0表示正确,1表示错误)

2,使用errno宏(可以简单理解为一个全局整形变量)去记录错误。(如果错误,就将被改变的全局整形变量返回)

c++中仍然可以用上面的两种方法,但是有缺点。

(1)返回值不统一,到底是1表示正确,还是0表示正确。

(2)返回值只有一个,通过函数的返回值表示错误代码,那么函数就不能返回其他的值。(输出的值到底是表示异常的值-1,还是最后在那个结果就是-1呢)


抛出异常基本操作


c++处理异常的优点:

异常处理可以带调用跳级。

img

在C程序中出现了异常,返回值为-1。如果C直接将-1传给B,不进行处理(也不给B报错),那么B收到-1返回值以后就会进行自己的处理,然后返回给A,然后A再进行自己的处理,那么最终程序返回的值肯定是错误的。

所以在c++中,要求必须要处理异常。如果C处理不了允许抛给B处理,B处理不了也允许抛给A处理,如果A也处理不了,那么就直接终止代码报错。

int myDivision(int a, int b)
{
   
	if (b == 0)
	{
   
		throw -1;//抛出-1
	}
	else
		return 1;
}

int main()
{
   
	int a = 10;
	int b = 0;
	try 
	{
   
		myDivision(a, b);
	}
	catch (int)
	{
   
		cout << "int类型异常捕获" << endl;
	}
	return 0;
}

如果抛出来的是char类型的数据(异常),那么就需要有个char类型的接收处理代码(catch+类型)。

除了int,char,double以外的抛出类型,可以用...来接收。

catch (...)
	{
   
		cout << "其他类型异常捕获" << endl;
	}

如果捕获到了异常,但是不想处理,那么可以继续向上抛出异常。

int myDivision(int a, int b)
{
   
	if (b == 0)
	{
   
		throw -1;
	}
}

void test()
{
   
	int a = 10;
	int b = 0;
	try
	{
   
		myDivision(a, b);
	}
	catch (int)
	{
   
		throw;
	}
}

int main()
{
   
	try 
	{
   
		test();
	}
	catch (int)
	{
   
		cout << "int类型异常捕获" << endl;
	}
	return 0;
}  




自定义的异常类


注意:类名加()就是匿名对象

class MyException
{
   
public:
	void printError()
	{
   
		cout << "我自己的异常" << endl;
	}
};

int myDivision(int a, int b)
{
   
	if (b == 0
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是小明同学啊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值