zoukankan      html  css  js  c++  java
  • C++异常 异常机制

    C++异常是丢程序运行过程中发生的异常情况(例如被0除)的一种响应。异常提供了将控制权从程序的一个部分传递到另一部分的途径。对异常的处理有3个组成部分:
    * 引发异常;
    * 使用处理程序捕获异常;
    * 使用try块。
    程序在出现问题时将引发异常。throw语句实际上是跳转,即命令程序跳到另一条语句。throw关键字表示引发异常,紧随其后的值(例如字符串或对象)指出了异常的特征。
    程序使用异常处理程序(exception handler)来捕获异常,异常处理程序位于要处理问题的程序中。catch关键字表示捕获异常。处理程序以关键字catch开头,随后是位于括号中的类型声明,它指出了异常处理程序要响应的异常类型;然后一一个用花括号括起的代码块,指出要采取的措施。catch关键字和异常类型用作标签,指出当异常被引发时,程序应跳到这个位置执行。异常处理程序也被称为catch块。
    try块标识其中特定的异常可能被激活的代码块,它后面跟一个或多个catch块。try块是由关键字try指示的,关键字try的后面是一个由花括号括起的代码块,表明需要注意这些代码引发的异常。
    要了解这3个元素是如何协同工作的,最简单的方法是看一个简短的例子,如下。
    error3.cpp

    // error3.cpp -- using an exception
    #include <iostream>
    double hmean(double a, double b);
    
    int main()
    {
        double x, y, z;
    
        std::cout << "Enter two numbers: ";
        while (std::cin >> x >> y)
        {
            try {
                z = hmean(x,y);         // start of try block
            }                           // end of try block
            catch (const char * s)      // start of exception handler
            {
                std::cout << s << std::endl;
                std::cout << "Enter a new pair of numbers: ";
                continue;
            }
            std::cout << "Harmonic mean of " << x << " and " << y
                      << " is " << z << std::endl;
            std::cout << "Enter next set of numbers <q to quit>: ";
        }
        std::cout << "Bye!
    ";
        return 0;
    }
    
    double hmean(double a, double b)
    {
        if (a == -b)
            throw "bad hmean() arguments: a = -b not allowed";
        return 2.0 * a * b / (a + b);
    }

    效果:

    Enter two numbers: 3 6
    Harmonic mean of 3 and 6 is 4
    Enter next set of numbers <q to quit>: 10 -10
    bad hmean() arguments: a = -b not allowed
    Enter a new pair of numbers: 1 19
    Harmonic mean of 1 and 19 is 1.9
    Enter next set of numbers <q to quit>: q
    Bye!

    出现异常时的程序流程:
    1.程序在try块中调用hmean()。
    2.hmean()引发异常,将从而执行catch块,并将异常字符串付给s。
    3.catch块返回到while循环的开始为值。

  • 相关阅读:
    关于js原型链继承的一些复习
    echarts 柱状图
    js的属性监听
    改变input[type=range]的样式 动态滑动
    占位符 css
    JS简单实现:根据奖品权重计算中奖概率实现抽奖的方法
    layui navTree 动态渲染菜单组件介绍
    配置单机Kafka
    树莓派安装pip3以及扩展包的方法
    Gunicorn+Nginx+Flask项目部署
  • 原文地址:https://www.cnblogs.com/moonlightpoet/p/5670427.html
Copyright © 2011-2022 走看看