C++ 异常详解

本文详细介绍了C++中的异常处理,从C语言的传统错误处理方式对比,深入讲解了C++异常的概念、使用方法、异常安全与规范、异常体系以及优缺点。强调了异常在构造函数和析构函数中的注意事项,以及自定义异常体系的重要性。
摘要由CSDN通过智能技术生成

目录

前言

1、C语言传统的处理错误的方式

2、C++异常概念

3、异常的使用

4、异常的安全与规范

 5、异常体系

6、异常的优缺点

总结


前言

在c语言中我们只能使用传统的返回错误码方式来处理错误,有时候会很不方便。所以在c++中增加了异常这一特性。


1、C语言传统的处理错误的方式

传统的错误处理机制:

  • 终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。
  • 返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错误。

2、C++异常概念

异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的
直接或间接的调用者处理这个错误。

  • throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。
  • catch: 在您想要处理问题的地方,通过异常处理程序捕获异常.catch 关键字用于捕获异常,可以有多个catch进行捕获。
  • try: try 块中的代码标识将被激活的特定异常,它后面通常跟着一个或多个 catch 块。

我们一般把异常定义成一个类,里面存放了异常编号和异常描述。并且提供了两个接口来获得编号和描述。

class MyExcetion
{
public:
	MyExcetion(int errid, const char* errmsg)
		:_errid(errid)
		, _errmsg(errmsg)
	{}

	int GetErrId() const
	{
		return _errid;
	}

	const string& what() const
	{
		return _errmsg;
	}

private:
	int _errid;
	string _errmsg;
	// ...
};

3、异常的使用

(1)先用throw抛出异常,再用tyr和catch捕获,通常抛出多少异常就要进行多少次捕获。除了作用域e就销毁了,所以本质上捕获到的是一个临时变量。这个拷贝的临时对象会在被catch以后销毁。

void f1()
{
	int i, j;
	cin >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值