C++中的try语句块和异常处理
2023-12-16 05:44:46
异常处理及其语法
异常处理是编程中用于处理程序运行时错误的一种机制。以下是C++中异常处理的关键组成部分:
try块
try
块用于包装可能会引发异常的代码块。当发生异常时,程序将跳转到try
块中的相关catch
块,而不会中断程序的执行。
catch块
catch
块用于捕获和处理try
块中抛出的异常。每个catch
块可以处理特定类型的异常,如果try
块中的异常类型与catch
块中指定的类型匹配,该catch
块将被执行。
throw语句
throw
语句用于在try
块中引发异常。它可以引发各种类型的异常,包括内置类型、自定义类型和标准库异常。
异常类型
异常类型通常是类或结构,它们可以包含有关异常的信息,例如错误消息或错误码。C++标准库提供了一些内置的异常类型,如std::runtime_error
、std::logic_error
等,但程序员也可以创建自定义异常类型。
e.what()
是 std::exception
类的成员函数,用于获取异常对象的错误消息(error message)。这个函数返回一个 C 字符串(const char*
),其中包含了关于异常的描述信息。
异常处理流程
如果在try
块内引发异常,程序会在当前作用域内寻找匹配的catch
块。如果找到匹配的catch
块,它将处理异常。如果找不到匹配的catch
块,程序将退出当前函数并查找包含该函数的更高层次的try
块,以寻找匹配的catch
块。如果一直没有匹配的catch
块,程序将终止并显示默认的异常信息。
示例代码
#include <iostream>
// 定义一个函数,用于执行整数除法
double divide(int numerator, int denominator) {
// 检查分母是否为零,如果是,则抛出 std::runtime_error 异常
if (denominator == 0) {
throw std::runtime_error("Division by zero is not allowed.");
}
// 执行除法操作,将分子强制转换为 double 类型以获得精确的结果
return static_cast<double>(numerator) / denominator;
}
int main() {
int numerator, denominator;
std::cout << "Enter numerator: ";
std::cin >> numerator;
std::cout << "Enter denominator: ";
std::cin >> denominator;
try {
// 调用 divide 函数尝试执行除法操作
double result = divide(numerator, denominator);
// 显示除法结果
std::cout << "Result of division: " << result << std::endl;
} catch (const std::runtime_error& e) {
// 捕获并处理 std::runtime_error 异常,显示错误消息
std::cerr << "Error: " << e.what() << std::endl;
} catch (...) {
// 捕获所有其他类型的异常,以防止程序崩溃
std::cerr << "Caught an unknown exception." << std::endl;
}
return 0;
}
输入输出结果
Enter numerator: 1
Enter denominator: 0
Error: Division by zero is not allowed.
文章来源:https://blog.csdn.net/qq_46348508/article/details/135025352
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!