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 ;
}

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

【c++ primer, 5e】【try语句块】-LMLPHP

5.25

#include <iostream>
//#include <stdexcept> 不写也一样编译。
using namespace std;
int main()
{
int x, y;
while (cin >> x >> y) {
try {
if (y == )
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 ;
}

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

05-19 19:38
查看更多