【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。。。