在编写程序时,难免会遇到一些错误和异常情况,如操作文件时文件不存在、因计算错误导致程序崩溃等。这些错误和异常情况会破坏程序的正常执行,造成程序的崩溃甚至严重危害系统的稳定性。为了避免这种情况,程序员常常会使用try-catch语句来捕捉异常,从而使程序避免崩溃的窘境。
什么是try-catch语句
try-catch语句是一种异常处理机制,其基本语法如下所示:
```c++
try {
// 正常执行代码
}
catch (Exception e) {
// 异常处理代码
}
```
try-catch语句由两部分组成:try块和catch块。try块中包含可能会出现异常的代码,如果没有异常发生,try块会正常执行。如果在try块中发现异常被抛出,程序执行流程就停止在抛出异常的地方,转而进入catch块中执行异常处理代码。catch块中的参数Exception e表示捕获的异常类型和异常对象,可以在catch块中使用该对象来进行异常处理。
使用try-catch语句的好处
使用try-catch语句的好处是,可以捕获并处理程序中出现的异常。在程序中,常常会因输入数据错误、内存分配失败、文件读写错误等原因发生异常,如果没有处理,这些异常可能会直接导致程序跑崩溃。
例如,当用户输入数字时,如果出现非数字字符,程序就会发生异常,而异常处理可以在用户出现错误输入时,及时提示用户重输,避免程序崩溃。
另外,使用try-catch语句可以提高程序的健壮性。程序出现异常时,如果做好了异常处理,程序可以在异常情况下正常执行,这样可以避免程序中断造成的影响和损失。
如何使用try-catch语句
使用try-catch语句的关键是要正确识别异常类型,并进行相应的处理。在C++中,异常类型通过抛出一个异常类的对象来标识,并在catch块中通过捕获异常对象的方式进行处理。
常见的异常类型有:
1. 数组越界异常
当程序访问数组元素时,如果超出数组的边界范围,程序就会发生越界异常。
```c++
try {
int arr[10];
for (int i = 0; i < 100; i++) {
arr[i] = i; // 越界访问数组
}
}
catch (out_of_range& e) {
cout << "数组越界异常: " << e.what() << endl;
}
```
2. 空指针异常
当程序访问空指针时,就会发生空指针异常。指针为空时,程序试图引用指针所指向的内存区域,导致访问了非法地址。
```c++
try {
int *p = NULL;
*p = 0; // 空指针访问
}
catch (nullptr_error& e) {
cout << "空指针异常: " << e.what() << endl;
}
```
3. 除零异常
当程序进行除法操作时,除数为零就会发生除零异常。可以在try块中使用if语句预判,避免出现除零异常。
```c++
try {
int a,b;
cin>>a>>b;
if(b==0){
throw domain_error("除零异常");
}