C++异常处理
【摘要】
目录
1,try,catch
2,throw
3,异常类
4,多重异常捕获
5,重抛出异常
6,异常规约(抛出列表)
7,noexcept
1,try,catch
try里面执行正常语句,如果出现标准异常,系统会抛出异常,catch可以捕获异常并处理,这样就不至于导致程序崩溃。
catch可以捕获特定类型的异常,也...
目录
1,try,catch
try里面执行正常语句,如果出现标准异常,系统会抛出异常,catch可以捕获异常并处理,这样就不至于导致程序崩溃。
catch可以捕获特定类型的异常,也可以用...捕获所有异常
-
int main()
-
{
-
try {
-
int x;
-
cin >> x;
-
int *p = new int[x];
-
cout << "success";
-
}
-
catch(...){
-
cout << "fail";
-
}
-
return 0;
-
}
输入-1,输出fail
并不是所有的异常都是标准异常,比如除0就不是。
-
int main()
-
{
-
try {
-
int y;
-
cin >> y;
-
y = 1 / y;
-
}
-
catch (...) {
-
cout << "1/0";
-
}
-
return 0;
-
}
输入0,程序直接崩溃,无法catch异常,因为系统根本没有抛出异常。
简单的说,除0是个非常底层的事件,为了保证性能,C++不把除0当做异常。
类似的,数组越界也不是异常。
2,throw
用throw可以主动抛出异常,异常类型可以是任何数据类型。
-
int main()
-
{
-
try {
-
int y;
-
cin >> y;
-
if (y == 0) {
-
throw - 1;
-
}
-
y = 1 / y;
-
}
-
catch (int e) {
-
cout << "1/0";
-
}
-
return 0;
-
}
3,异常类
C++预定义了多个可用于创建异常对象的类,其中基类是exception类,类中包含虚函数what(),用来返回异常的错误信息。
也可以自定义异常类。
4,多重异常捕获
可以在一个try块后面添加多个catch块,以捕获多种类型的异常。
执行时会从前至后依次检查每个catch块是否匹配。
5,重抛出异常
在catch块中也可以throw异常,再交给别的地方处理。
6,异常规约(抛出列表)
不带异常规约的函数,可以抛出任何异常。
带异常规约的函数,如果抛出一个不在列表中的异常,会导致unexpected被调用。
如果抛出列表为空,抛出任何异常都会导致unexpected被调用。
7,noexcept
函数抛出异常:
-
int f()
-
{
-
int y;
-
cin >> y;
-
if (y == 0) {
-
throw - 1;
-
}
-
y = 1 / y;
-
return 0;
-
}
-
-
int main()
-
{
-
try {
-
f();
-
}
-
catch (int e) {
-
cout << "1/0";
-
}
-
return 0;
-
}
noexcept关键字可以用来限制函数不能抛出异常
-
int f() noexcept
-
{
-
// ...
-
return 0;
-
}
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/104637942
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)