今天小编给大家分享一下C++中的异常抛出和捕获方式是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在 C 语言中,如果发生错误,上级函数要进行出错处理,层层上传,容易造成过多的出错处理代码,并且传递的效率比较低下。C++ 中,异常的引发和异常的处理不必处于同一个函数中,因此底层函数可以着重于解决具体问题,而不必过多的考虑异常处理异常是专门针对抽象编程中的一系列错误处理的,遇到错误信息就转到若干级之上进行重新尝试异常脱离于函数机制,决定了其对函数的跨越式回跳被检测的语句放在 try 块中try catch 语句中的花括号是语法的一部分,不能省略try-catch 结构中,只能有一个 try 块,catch 块可以有多个,以便与不同的类型信息匹配,有点类似于 switch-case 结构利用 throw 抛出的异常类型,可以传递系统预定义的标准类型或免费云主机域名自定义类型从 throw 抛出异常,到 catch 捕获异常,有点类似与利用函数的返回值进行复制一样,因此如果使用了自定义类型,需要考虑自定义类型的赋值和拷贝问题如果 catch 语句没有与之相匹配的异常类型信息,可以用(…)表示可以捕获任何异常类型的信息,有点类似与 switch-case 结构中的 defaulttry-catch 结构可以与 throw 在同一函数中,也可以不在同一个函数中,throw 抛出异常后,会先在本函数中寻找与之相匹配的 catch 块,如果没有与之相匹配的 catch,就可以转到上一层 try-catch,如果仍然没有匹配到,则转到再上一层 try-catch…,如果最终到不到与之匹配的 try-catch 块,系统就会调用系统函数,terminal 使程序终止结果为:catch func1()
end func1()
end func2()
end func3()
end main上边的异常传递路线为 func3->func2()->func1(),在 func1 中找到对应的 catch 块,然后执行对应 catch 块中的语句,输出:catch func1()整个的异常处理已经结束,跳出 func1() 的 try-catch 块,继续执行 func1() 的函数体,陆续输出:end func1()
end func2()
end func3()
end main此时进程结束。如果将 func1() 中的 catch 到的异常类型换个类型,如:结果为:catch main
end main则会在 func1(),func2(),func3() 中都找不到对应的 catch 匹配,直到 main 函数才能找到对应的匹配,然后输出:catch main
end main如果将 main 函数中的 catch 捕获类型也修改为:结果为:terminate called after throwing an instance of ‘double’
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application’s support team for more information.此时系统就会调用系统函数,使程序终止。为了增强程序的可读性,可以在函数声明时就列出所有可能抛出的异常类型如果在函数声明时没有声明可能抛出的异常类型,则函数可以抛出任意类型的异常不抛出任何类型异常的函数,可以声明为:如果一个函数抛出了抛出类型声明中所不允许的异常,unexpected 函数被调用,启用 terminal 函数中止程序异常被抛出后,从进入 try 块起,到异常被抛掷前,这期间在栈上的构造的所有对象,都会被自动析构析构的顺序与构造的顺序相反。这一过程称为栈的解旋而堆上的空间,则会泄漏结果为:A()
A()
~A()
~A()
no x, no y如果 throw 的是一个类对象:结果为:A()
A(const A &obj)
~A()
no x, no y
~A()以上就是“C++中的异常抛出和捕获方式是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。
这篇“php字符串增加1如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的免费云主机域名借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php字符串增加1如何实现”文章吧。 php字符串增…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。