使用lambdaquery() 报空指针异常_C++:15异常机制

c9730637a42678831f15cc5171ee69ca.gif

       1.概念:异常处理是一种允许两个独立开发的程序组件在程序执行时遇到不正常的情况相互通信的工具

  • 2.异常检测和异常处理的方式

    • throw表达式:程序遇到了错误或者无法处理的问题,使用throw引发异常

    • try、catch语句块:以关键字tyr开始,并以一个或多个catch子句结束。它们也被称为异常处理代码

一、throw

  • 1.概念:程序的异常检测部分使用throw表达式引发一个异常

  • 2.格式:

    • throw  表达式;

    • 表达式可以为:整型、浮点型、字符、字符串、类、函数......

  • 3.注意事项

    • 当执行throw时,跟在throw后面的语句将不再被执行。程序的执行权将转移到与之匹配的catch语句块中

    • 如果一条throw表达式解引用一个基类指针,而这个指针指向于派生类对象,则抛出的对象被切掉的一部分是基类部分中的。会在下面详细讲解

二、try、catch语句块

  • 1.格式

try{
     ...}catch(){
     ...}catch(){
     ...}
  • 2.注意事项

    • try和catch都不可以省去花括号,尽管后面只有一条语句也不能省去

    • 在try和catch组合中,try最多只有一个,catch可以有多个

    • 嵌套:try和catch语句块中都可以再嵌套try、catch语句块组合

    • try中使用throw抛出一个异常时,跳转到参数类型与throw后面表达式类型相对应的catch语句块中,throw后面的语句将不再执行

    • 栈展开:下面介绍

三、catch的相关知识

catch的参数

  • ①若catch的参数为类对象,则:

    • 若参数为非引用类型,在catch语句块中实际上改变的是局部副本,不改变传入的异常对象本身。相反,如果参数为引用类型,则在语句块内改变参数,也就是改变对象本身

    • 如果catch的参数为基类类型,则我们可以使用派生类类型的异常对象对其进行初始化。如果是非引用类型,则异常对象将被切掉一部分,若是引用类型,则以常规的方式绑定到异常对象上。如果传入的参数与某个继承有关,最好将参数定义为引用类型

    • 重点:catch参数是基类类型,catch无法使用派生类特有的成员

catch的书写顺序

  • ①若多个catch与句之间存在着继承关系,则:

    • 继承链最低端的类放在前面,继承链最顶端的类放在后面

catch语句重新抛出

  • 概念:有时,一条单独的catch语句不能完整地处理某个异常,会将传递的异常继续传递给外层try、catch组合或者上一层的函数处理

  • 语法格式:throw;   //只是一条throw,不包含任何表达式

  • throw;只能出现在catch语句或者由catch语句直接或间接调用的函数之内

  • 如果catch参数是引用类型,在catch语句中改变参数值,下一条catch接受的是改变后的参数。代码如下

try{
     try{
     }catch(A &a){
     a.data=100;throw;  //将异常抛出给外层处理,因为a为引用,因此抛出后a.data=100}}catch(A a){
     </
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值