zoukankan      html  css  js  c++  java
  • 【c++ primer, 5e】【try语句块】

    p172~p177:
    c++的try语句块和异常处理:

    1、通常,与用户交互的代码和对象相加(底层的代码)是分离开的,异常由与用户交互的代码处理(底层代码抛出异常就可以了)。

    2、C++的runtime_error和Java的有很大的不同!!!

    3、编写异常安全的代码非常困难。

    4、寻找处理代码的过程与函数调用链刚好相反,首先从抛出该异常的函数开始找匹配的catch子句。

    5、好好理解这句话:异常中断了程序的正常的流程。

    6、仍然不是很理解异常处理机制,暂时理解到:在必须使用的时候使用(例如文件,socket等),如果try catch能让程序更易于理解就使用它(而不是if-else),调用一个方法要知道这个方法可能抛出怎样的异常。

    想问的问题:
    1、能不能完全用if-else代替throw-try-catch?

    2、使用try-catch的时机?

    练习:

    5.23

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
        int a, b;
        cin >> a >> b;
        cout << a / b << endl;
        return 0;
    }

    5.24
    程序最终没找到匹配的catch子句。

    5.25

    #include <iostream>
    //#include <stdexcept>    不写也一样编译。
    using namespace std;
    int main()
    {
        int x, y;
        while (cin >> x >> y) {
            try {
                if (y == 0) 
                    throw runtime_error("!!!");    // 抛出异常会导致函数终止,控制权被转移到catch子句!
                int i = x / y;
            } catch (runtime_error err) {
                cout << err.what() << "
     y or n?" << endl;
                char c;
                cin >> c;
                if (c == 'n') {
                    break;
                }
            }
        }
        return 0;
    }

     ps:起初我认为 3 / 0自动会throw exception。。。

  • 相关阅读:
    mysql事件之修改事件(ALTER EVENT)&禁用事件(DISABLE)&启用事件(ENABLE)&事件重命名&数据库事件迁移
    用Sqoop进行Hive和MySQL之间的数据互导
    Sqoop使用手册
    azkaban使用案例
    azkaban3.x安装
    工作流调度器azkaban概述
    将 Hive 空值统一为 N
    [模拟] [洛谷] P1765 手机
    [NYISTOJ] 题目845 无主之地1
    [NYISTOJ] 题目 458 小光棍数
  • 原文地址:https://www.cnblogs.com/xkxf/p/6559572.html
Copyright © 2011-2022 走看看