【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() << "\n y or n?" << endl;
            char c;
            cin >> c;
            if (c == 'n') {
                break;
            }
        }
    }
    return 0;
}

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

posted @ 2017-03-16 15:06  xkfx  阅读(206)  评论(0编辑  收藏  举报