zoukankan      html  css  js  c++  java
  • C++学习之路: try&catch 语句块处理异常

    #include <iostream>
    #include <string>
    #include <vector>
    #include <stdexcept>
    using namespace std;
    
    //对于不同的异常可以采取不同的catch块进行捕捉
    int main(int argc, const char *argv[])
    {
        try
        {
            int i;
            cin >> i;
            if(i == 0)
                throw runtime_error("出现运行期错误");   //发送一个runtime_error异常
            else if(i == 1)
                throw invalid_argument("非法参数");
        }
        catch(runtime_error &e)  
        {
            cout << "runtime_error :" << e.what() << endl;  //e.what()中保存着错误信息
        }
        catch(invalid_argument &e)
        {
            cout << "invalid_argument:" << e.what() << endl;
        }
    
        cout << "继续运行" << endl;
        return 0;
    }
    #include <iostream>
    #include <string>
    #include <vector>
    #include <stdexcept>
    using namespace std;
    
    //异常捕获不到,照样因为core dump
    int main(int argc, const char *argv[])
    {
        try
        {
            int i;
            cin >> i;
            if(i == 0)
                throw runtime_error("出现运行期错误");
            else if(i == 1)
                throw invalid_argument("非法参数");
        }
        catch(runtime_error &e)
        {
            cout << "runtime_error :" << e.what() << endl;
        }
    
        cout << "继续运行" << endl;
        return 0;
    }

    如果没有捕捉到异常则跳过CATCH继续执行后面的代码

    try & catch是处理异常十分好用的一种语句块。要多加练习

    以下是一个重要的模板

    #include <iostream>
    #include <string>
    #include <vector>
    #include <stdexcept>
    using namespace std;
    
    //对于不同的异常可以采取不同的catch块进行捕捉
    //对于一部分可以统一处理
    int main(int argc, const char *argv[])
    {
        try
        {
            int i;
            cin >> i;
            if(i == 0)
                throw runtime_error("出现运行期错误");
            else if(i == 1)
                throw invalid_argument("非法参数");
            else if(i == 2)
                throw logic_error("逻辑错误");
            else
                throw out_of_range("越界错误");
        }
        catch(...) //能捕获所有的异常
        {
        
        }
        catch(exception &e)
        {
            cout << "异常信息:" << e.what() << endl;
        }
        catch(runtime_error &e)
        {
            cout << "runtime_error :" << e.what() << endl;
        }
        catch(invalid_argument &e)
        {
            cout << "invalid_argument:" << e.what() << endl;
        }
        cout << "继续运行" << endl;
        return 0;
    }
  • 相关阅读:
    关于Android线程间通信
    关于代码重构
    Android读书笔记01
    回忆 2012年写的
    我的笑 -- 2007年写的?
    伊人笑 2010年
    血色青春 2012年
    隔夜听雨
    错乱的爱 2010年
    【前端JS、后台C#】编码解码。
  • 原文地址:https://www.cnblogs.com/DLzhang/p/3978372.html
Copyright © 2011-2022 走看看