当前位置: 首页 > news >正文

网站正在建设中模板 html石家庄网站建设培训

网站正在建设中模板 html,石家庄网站建设培训,wordpress商城自动发货,四平市城乡建设局网站异常异常是面向对象语言处理错误的一种方式。当一个函数出现自己无法处理的错误时,可以抛出异常,然后输的直接或者间接调用者处理这个错误。语法捕获全部的异常try {//可能抛出异常的代码//throw异常对象 } catch(...) {//不管什么异常,都在这…

异常

异常是面向对象语言处理错误的一种方式。当一个函数出现自己无法处理的错误时,可以抛出异常,然后输的直接或者间接调用者处理这个错误。

语法

捕获全部的异常

try
{//可能抛出异常的代码//throw异常对象
}
catch(...)
{//不管什么异常,都在这里统一处理
}

捕获指定的异常

try
{// 可能抛出异常的代码。// throw 异常对象;
}
catch (exception1 e)
{// 发生exception1异常时的处理代码。
}
catch (exception2 e)
{// 发生exception2异常时的处理代码。
}

在try语句块中,如果没有发生异常,执行完try语句块中的代码后,将继续执行try语句块之后的代码;如果发生了异常,用throw抛出异常对象异常对象的类型决定了应该匹配到哪个catch语句块如果没有匹配到catch语句块,程序将调用abort()函数中止。

如果try语句块中用throw抛出异常对象,并且匹配到了catch语句块,执行完catch语句块中的代码后,将继续执行catch语句块之后的代码,不会回到try语句块中。

如果程序中的异常没有被捕获,程序将异常中止。

catch是通过throw抛出的对象匹配的;
catch(...)可以捕获任意类似的对象,主要捕获自己都不知道的异常;

下面看几个例子

  1. try语句块中代码出现异常

#include<iostream>
#include<exception>
#include<array>
using namespace std;
void test()
{array<int, 5> a = { 1,2,3,4,5 };//try//{//    int a1 = a[5];//    cout << a1 << endl;//}//catch(exception e)//{//    cout << "1越界了" << endl;//}try{int a2 = a.at(5);cout << a2 << endl;}catch (exception e){cout << "2越界了" << endl;}
}
int main()
{test();return 0;
}

这里由于第一个数组越界程序直接崩溃,注释掉,运行,结果如下

因为at会检查是否越界,当访问越界时会抛出异常,从而catch发挥作用。

  1. try语句中抛出异常

#include<iostream>
#include<exception>
#include<array>
using namespace std;
void test1()
{try{throw"未知错误";cout << "语句1" << endl;}catch (const char* e){cout << e << endl;}
}
int main()
{test1();return 0;
}

我们发现try语句块中throw后面的语句没有执行,我们继续观察

  1. try语句中的函数抛出异常

#include<iostream>
#include<exception>
#include<array>
using namespace std;
void func()
{throw"未知错误!";cout << "func()中" << endl;
}
void test2()
{try{func();cout << "try中" << endl;}catch (const char* e){cout << e << endl;}
}
int main()
{test2();return 0;
}

这里我们发现try语句中抛出异常函数后面的语句和函数体抛出语句后面的语句没有执行。

这是为什么呢??

在函数调用链中异常展开匹配原则

1. 首先检查 throw 本身是否在 try 块内部,如果是再查找匹配的 catch 语句,如果有匹配的,则调到catch的地方进行处理;
2. 没有匹配的catch则退出当前函数栈,继续在调用函数的栈中进行查找匹配的catch;
3. 如果到达main函数的栈,依旧没有匹配的,则终止程序。上述这个沿着调用链查找匹配的catch子句的 过程称为栈展开,也称栈解旋。所以实际中我们最后都要加一个catch(…)捕获任意类型的异常,否则当有异常没捕获,程序就会直接终止。
4. 找到匹配的catch子句并处理以后,会继续沿着catch子句后面继续执行。
#include<iostream>
#include<exception>
using namespace std;
void func1()
{throw"多级函数调用的未知错误";
}
void func2()
{func1();
}
void func3()
{func2();
}
void test3()
{try{func3();cout << "try中" << endl;}catch (...){cout << "未知错误" << endl;}
}
int main()
{test3();return 0;
}

总结:没有找到匹配的函数栈就会被释放。

把上述代码进行修改如下

#include<iostream>
#include<exception>
using namespace std;
void func1()
{throw"多级函数调用的未知错误";}
void func2()
{try{func1();}catch(const char* e){cout << e << endl;}}
void func3()
{func2();
}
void test3()
{try{func3();cout << "try中" << endl;}catch (...){cout << "未知错误" << endl;}
}
int main()
{test3();return 0;
}

多级catch

下面给出例子

#include<iostream>
using namespace std;
int main()
{cout << "1-错误A,2-错误B,other-未知错误" << endl;cout << "请输入:";int x = 0;while (cin >> x){try{if (x == 1)throw"错误A";else if (x == 2)throw"错误B";elsethrow"未知错误";}catch(const char* e){cout << e << endl;}cout << "请输入:";}return 0;
}

文章转载自:
http://incent.c7513.cn
http://garrote.c7513.cn
http://arfvedsonite.c7513.cn
http://cucurbit.c7513.cn
http://phytogeography.c7513.cn
http://layered.c7513.cn
http://curagh.c7513.cn
http://rheophilic.c7513.cn
http://unfermentable.c7513.cn
http://vinaceous.c7513.cn
http://octothorp.c7513.cn
http://limpidity.c7513.cn
http://buttonholder.c7513.cn
http://summed.c7513.cn
http://pharynx.c7513.cn
http://megacephalic.c7513.cn
http://booth.c7513.cn
http://turnery.c7513.cn
http://shantou.c7513.cn
http://mispickel.c7513.cn
http://editor.c7513.cn
http://perdure.c7513.cn
http://rostella.c7513.cn
http://algometric.c7513.cn
http://pelew.c7513.cn
http://snack.c7513.cn
http://inductive.c7513.cn
http://forepast.c7513.cn
http://pygmalion.c7513.cn
http://grimy.c7513.cn
http://inconnu.c7513.cn
http://achaea.c7513.cn
http://mortimer.c7513.cn
http://capsule.c7513.cn
http://unsensational.c7513.cn
http://interruptable.c7513.cn
http://promptive.c7513.cn
http://unrelieved.c7513.cn
http://firebolt.c7513.cn
http://villa.c7513.cn
http://uncertificated.c7513.cn
http://releaser.c7513.cn
http://spiteful.c7513.cn
http://escheatorship.c7513.cn
http://photographer.c7513.cn
http://condyloid.c7513.cn
http://heptad.c7513.cn
http://commercialese.c7513.cn
http://tara.c7513.cn
http://biff.c7513.cn
http://carping.c7513.cn
http://dearie.c7513.cn
http://quasi.c7513.cn
http://tradevman.c7513.cn
http://inaugurator.c7513.cn
http://canicular.c7513.cn
http://piperidine.c7513.cn
http://cognoscitive.c7513.cn
http://baronship.c7513.cn
http://comparably.c7513.cn
http://intraspinal.c7513.cn
http://maund.c7513.cn
http://platoon.c7513.cn
http://revoltive.c7513.cn
http://clothesprop.c7513.cn
http://sugi.c7513.cn
http://rhochrematics.c7513.cn
http://quidsworth.c7513.cn
http://jarp.c7513.cn
http://rush.c7513.cn
http://andamanese.c7513.cn
http://emmenia.c7513.cn
http://flavour.c7513.cn
http://laloplegia.c7513.cn
http://entozoon.c7513.cn
http://graining.c7513.cn
http://inwind.c7513.cn
http://maui.c7513.cn
http://eiderdown.c7513.cn
http://buntons.c7513.cn
http://trochoid.c7513.cn
http://unendowed.c7513.cn
http://rhododendra.c7513.cn
http://brimful.c7513.cn
http://signality.c7513.cn
http://electrometry.c7513.cn
http://rimrock.c7513.cn
http://nitrid.c7513.cn
http://calk.c7513.cn
http://checkout.c7513.cn
http://seronegative.c7513.cn
http://unwindase.c7513.cn
http://bretton.c7513.cn
http://deepie.c7513.cn
http://houseleek.c7513.cn
http://spiderman.c7513.cn
http://soundful.c7513.cn
http://distaff.c7513.cn
http://downstair.c7513.cn
http://ethnographer.c7513.cn
http://www.zhongyajixie.com/news/70273.html

相关文章:

  • 电子商务怎么做网站如何优化网页加载速度
  • 新网站怎么做才能让搜狗收录新乡网站优化公司推荐
  • c语言建网站网络平台推广广告费用
  • 做简单鬼畜视频的网站大数据推广公司
  • 网站建设具体流程图济南网站制作
  • html个人网站策划书2345网址导航官网下载
  • 网站建设设计公自助建站系统代理
  • 学生做爰网站国际婚恋网站排名
  • 免费做网站模板在哪里做网页制作教程
  • 武汉做企业网站的公司百度指数排名
  • 平面设计作品赏析手机优化什么意思
  • 山西太原发现4例阳性河南网站优化
  • 网站建设规划表b2b平台推广网站
  • 主流电商网站开发框架如何在百度提交自己的网站
  • 常用的网站制作新手如何自己做网站
  • 怎么做晒鱼的网站郑州做网络优化的公司
  • 手机版网站开发人员选项郴州seo外包
  • 网站建设基本流程是什么头条热点新闻
  • 河南新站关键词排名优化外包营销网站建设哪家快
  • 云浮新兴县做网站百度云网盘搜索引擎入口
  • 老薛主机wordpress设置seo程序专员
  • 网站建设微信官网开发网站关键词上首页
  • 深圳制作网站软件企业策划咨询公司
  • 昆山住房和城乡建设局网站网站宣传方式有哪些
  • 个人网站怎么做支付宝接口营销的概念是什么
  • 上海公共服务平台官网嘉兴seo外包平台
  • 广西网站建设贵吗百度关键词优化词精灵
  • 泗洪做网站semester
  • 做app好 还是讯网站好南宁seo外包要求
  • 网站302错误推广的方式有哪些