• 程序中try、throw、catch三者之间的关系


    c++程序中,采用一种专门的结构化处理逻辑的异常处理机制。

    1.try语句

    try语句块的作用是启动异常处理机制,检测try语句块中程序语句执行时可能出现的异常。

    try语句块总是与catch一同出现,在一个try语句块后,至少有一个catch语句块。

    2.throw语句

    throw语句用来强行抛出异常,具体格式如下:

    throw[异常类型表达式]   异常类型表达式可以是类对象,常量或变量表达式。

    3.catch语句块

    catch语句块首先捕捉try语句块产生的或有throw抛出的异常,然后进行处理。

    catch(形参类型[形参名])                        //形参类型可以是c++的基本类型(如int,long,char等)

    {

              //异常处理语句...

    }

    catch语句块中使用该形参名。例如:

    try

    {

    throw "除数不能为0!";

    }

    catch(const char* s)    //制定形参类型名

    {

    cout<<s<<endl;         //使用异常形参名

    }

    当catch语句块中的整个形参为“...”时,则表示catch语句块能够捕捉任何类型的异常。catch的语句块前面必须是try语句或者另外一个catch语句块。

    try、throw、catch三者之间的关系和注意点

    throw和catch的关系类似函数调用关系,catch指定形参,throw给出实参。编译器按照catch出现的顺序及catch指定的参数类型确定throw抛出的异常应该有哪个catch来处理。

    throw不一定出现在try语句块中,实际上,他可以出现在需要的任何地方,即使在catch的语句块中,仍然可以继续使用throw,只要最终有catch可以捕获它即可。

    案例:

    class Overflow

    {

    public:

      Overflow(char,double,double);

    };

    void f(double x)

    {

    throw Overflow('+',x,3.45e107);  //在函数体中使用throw,用来抛出一个对象

    }

    try

    {

      f(1.2);

    }catch(Overflow& oo)

    {

      //处理Overflow类型异常

    }

    当throw出现在catch语句块中时,通过throw即可重新抛出一个新类型的异常,也可以重新抛出当前这个异常,在这种情况下,throw不应带任何实参。

    try{

    }catch(int)

    {

    throw "hello exception";  //抛出一个新的异常,异常类型为const char*

    }catch(float)

    {

    throw;  }    //重新抛出当前的float类型异常

  • 相关阅读:
    Mac下安装Mysql
    事务隔离级别
    Mysql和Orcale的区别
    springboot的优点
    spring boot注解
    spring boot 常用注解
    java链接Mysql出现警告:Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by
    SpringApplication及banner的配置
    交叉编译
    qt下载和安装记录
  • 原文地址:https://www.cnblogs.com/mydomain/p/9918055.html
Copyright © 2020-2023  润新知