异常处理是一种在程序执行期间处理错误或异常情况的机制,它允许程序在发生错误时转移到错误处理代码,从而提高程序的健壮性和可靠性。在 C++ 中,异常处理通过 try
、throw
和 catch
关键字来实现。
- try: 用于包含可能会引发异常的代码。程序在执行
try
块中的代码时,如果发生异常,将会跳转到匹配的 catch
块进行异常处理。try
块必须和至少一个 catch
块配对使用。
- throw: 用于在程序中手动抛出异常。它可以抛出任何类型的异常,包括基本数据类型、类对象、指针等。当程序执行到
throw
语句时,会立即跳转到匹配的 catch
块中,并执行相应的异常处理代码。
- catch:用于捕获并处理
try
块中抛出的异常。catch
块必须紧跟在 try
块之后,用于处理特定类型的异常或者所有类型的异常。catch
块中可以使用异常类型来捕获特定类型的异常,也可以使用省略号 ...
来捕获所有类型的异常。一个 try
块可以有多个 catch
块,每个 catch
块可以捕获不同类型的异常,但只有第一个匹配的 catch
块会被执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| #include <iostream>
void processNumber(int num) { if (num == 0) { throw "Divide by zero exception"; } else if (num < 0) { throw std::runtime_error("Negative number exception"); } else { std::cout << "Result: " << 100 / num << std::endl; } }
int main() { try { processNumber(0); } catch (const char* msg) { std::cerr << "Caught exception: " << msg << std::endl; } catch (const std::exception& e) { std::cerr << "Caught exception: " << e.what() << std::endl; }
try { processNumber(-5); } catch (const char* msg) { std::cerr << "Caught exception: " << msg << std::endl; } catch (const std::exception& e) { std::cerr << "Caught exception: " << e.what() << std::endl; }
try { processNumber(10); } catch (const char* msg) { std::cerr << "Caught exception: " << msg << std::endl; } catch (const std::exception& e) { std::cerr << "Caught exception: " << e.what() << std::endl; }
return 0; }
|