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;
    }
  • 相关阅读:
    #Leetcode# 338. Counting Bits
    POJ 3614(Sunscreen)
    POJ 2392(Space Elevator)
    POJ 3666(Making the Grade)
    Coursera吴恩达《构建机器学习项目》课程笔记 -- 机器学习策略(下)
    Coursera吴恩达《构建机器学习项目》课程笔记-- 机器学习策略(上)
    深度学习入门--Stanford CS230--学习笔记
    POJ 1065 (Wooden Sticks)
    POJ 1742(Coins)
    C++ 按位与(&)、或(|)、异或(^)等操作符
  • 原文地址:https://www.cnblogs.com/DLzhang/p/3978372.html
Copyright © 2011-2022 走看看