何为异常处理
- 异常exception,即运行时错误
- C中没有异常机制,所以运行时遇到错误只能终止程序
- C++中新增了异常处理机制,允许程序在运行时拦截错误并处理,这样程序就不用终止
- 异常机制的一个典型案例就是:由用户输入2个数字然后相除中的除0异常
- try , catch , throw
- 异常处理机制为什么优于出错条件判断:https://www.cnblogs.com/wkfvawl/p/10816156.html
异常和函数
- throw 一个异常后,如果没有 catch,会层层向外传递,直到被 catch 为止
- 函数可以用 throw 列表来标识自己会抛出的异常
标准库中的exception类
- 标准库中定义的异常类及其派生类,很多内置代码的错误会抛出这些异常
- 譬如 bad_typeid ,使用 typeid 运算符时,如果其 *** 作数是一个多态类的指针,而该指针的值为 NULL,则会抛出此异常
- 譬如 bad_cast , 用 dynamic_cast 进行从多态基类对象(或引用)到派生类的引用的强制类型转换时,如果转换是不安全的,则会抛出此异常
noexcept关键字
- throw(int , double , A , B, C) 表示函数可能会抛出这5种类型的exception
- throw() 表示函数不会抛出任何异常
- C++11中引入noexcept 关键字替代 throw() 表示函数不会抛出任何异常 noexcept(bool)
- 没有 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种异常
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)