C++学习笔记10 - 异常处理机制

C++学习笔记10 - 异常处理机制,第1张

何为异常处理

  1. 异常exception,即运行时错误
  2. C中没有异常机制,所以运行时遇到错误只能终止程序
  3. C++中新增了异常处理机制,允许程序在运行时拦截错误并处理,这样程序就不用终止
  4. 异常机制的一个典型案例就是:由用户输入2个数字然后相除中的除0异常
  5. try , catch , throw
  6. 异常处理机制为什么优于出错条件判断:https://www.cnblogs.com/wkfvawl/p/10816156.html

异常和函数

  1. throw 一个异常后,如果没有 catch,会层层向外传递,直到被 catch 为止
  2. 函数可以用 throw 列表来标识自己会抛出的异常

标准库中的exception类

  1. 标准库中定义的异常类及其派生类,很多内置代码的错误会抛出这些异常
  2. 譬如 bad_typeid ,使用 typeid 运算符时,如果其 *** 作数是一个多态类的指针,而该指针的值为 NULL,则会抛出此异常
  3. 譬如 bad_cast , 用 dynamic_cast 进行从多态基类对象(或引用)到派生类的引用的强制类型转换时,如果转换是不安全的,则会抛出此异常

noexcept关键字

  1. throw(int , double , A , B, C) 表示函数可能会抛出这5种类型的exception
  2. throw() 表示函数不会抛出任何异常
  3. C++11中引入noexcept 关键字替代 throw() 表示函数不会抛出任何异常 noexcept(bool)
  4. 没有 throw 列表的函数,表示函数可能会抛出任意类型的异常

异常处理机制使用demo

#include 

using namespace std;


int main(void)
{
// 让用户输入2个数,然后程序返回他的相除
	cout << "please input 2 numbers" << endl;
	int m, n;
	cin >> m >> n;
	
	// C++中用异常处理机制来处理
	try
	{
		// try括号里的代码就是有可能触发异常的代码
		if (n == 0)
			throw ('A');
		cout << "m / n = " << m/n << endl;
	}
	catch (int e)		// catch的()里写上要抓取的异常类型
	{
		cout << "catch int e" << endl;
	}
	catch (double e)		// catch的()里写上要抓取的异常类型
	{
		cout << "catch double e" << endl;
	}
	
	
/*	
	// C中我们这样处理
	if (n == 0)
	{
		cout << "0 not good" << endl;
		return -1;
	}
	else
	{
		cout << "m / n = " << m/n << endl;
	}
*/	
	
	cout << "---other code---" << endl;	
	
	return 0;
}



void func(void) throw(A, B, C);		// 这种声明就是告诉调用者func有可能抛出3种异常






欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/584985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存