63异常处理

简介: 63异常处理

C++入门——60s从0到1

异常处理

 

在C++编程中,异常处理是一种用于处理程序运行时错误的机制。当代码出现错误时,程序将抛出一个异常,如果不对其进行处理,程序将终止运行并输出错误信息。在这篇文章中,我们将详细讲解C++中的异常处理机制,包括如何抛出异常、如何捕获异常以及如何处理异常。

 

抛出异常

 

在C++中,可以使用`throw`语句来抛出一个异常。当程序运行到`throw`语句时,程序将抛出一个异常并终止当前函数的执行。下面是一个抛出异常的示例代码:

 

#include <iostream>
using namespace std;
 
int divide(int x, int y) {
    if (y == 0) { // 如果y为0,则抛出异常
        throw "除数不能为0";
    }
    return x / y;
}
 
int main() {
    try {
        int result = divide(10, 0); // 调用divide函数,并将结果存储在result变量中
        cout << "result = " << result << endl;
    } catch (const char* msg) { // 捕获抛出的异常
        cerr << "Error: " << msg << endl;
    }
    return 0;
}

 

在这个例子中,程序定义了一个名为`divide`的函数来计算两个整数的商。如果除数为0,该函数将抛出一个异常。在`main`函数中,程序调用了`divide`函数,并将结果存储在变量`result`中。由于除数为0,`divide`函数将抛出一个异常。最后,程序使用`try-catch`语句来捕获这个异常并输出错误信息。需要注意的是,在抛出异常时,我们可以使用一个字符串或字符串常量作为异常信息。

 

捕获异常

 

在C++中,可以使用`try-catch`语句来捕获异常。当程序运行到`try`语句块中的代码时,如果代码块中出现了异常,程序将跳转到与之对应的`catch`语句块中执行相应的操作。下面是一个捕获异常的示例代码:

 

#include <iostream>
using namespace std;
 
int divide(int x, int y) {
    if (y == 0) { // 如果y为0,则抛出异常
        throw "除数不能为0";
    }
    return x / y;
}
 
int main() {
    try {
        int result = divide(10, 0); // 调用divide函数,并将结果存储在result变量中
        cout << "result = " << result << endl;
    } catch (const char* msg) { // 捕获抛出的异常
        cerr << "Error: " << msg << endl;
    }
    return 0;
}

 

在这个例子中,程序使用`try-catch`语句来捕获由`divide`函数抛出的异常。如果出现了异常,程序将跳转到与之对应的`catch`语句块中执行相应的操作。在这个例子中,我们输出了一条错误信息。需要注意的是,在`catch`语句块中,我们可以根据需要处理不同的异常类型或自定义异常类型。

目录
相关文章
|
Python
子域名收集 -- subdns​
子域名收集 -- subdns​
88 0
|
弹性计算 关系型数据库 MySQL
使用HBR快速上手备份ECS/OSS/NAS/MYSQL
本场景带您体验如何通过混合云备份HBR,实现云服务器ECS的备份、恢复和克隆,对象存储OSS的备份和恢复,文件存储NAS的备份和恢复。
|
存储 SQL 关系型数据库
【mysql】日期与时间类型
【mysql】日期与时间类型
1584 0
【mysql】日期与时间类型
|
SQL 监控 安全
网络安全原理与应用:Web应用安全简介
网络安全原理与应用:Web应用安全简介
284 0
|
芯片 异构计算
FPGA-基于chipscope的超声波测距调试
FPGA-基于chipscope的超声波测距调试
332 0
FPGA-基于chipscope的超声波测距调试
|
小程序 JavaScript
4.2【微信小程序全栈开发课程】个人中心(二)--显示随机语句
上节课已经将用户的微信头像、微信昵称显示出来了,这节课,我们在微信昵称的下面实现随机语句的显示 也就是挑选10条励志的句子,用户每次切换到个人中心页面,都会随机显示这10条句子中的一条
316 0
4.2【微信小程序全栈开发课程】个人中心(二)--显示随机语句
|
数据管理 数据库 索引
干货 | Elasticsearch Nested类型深入详解
本文通过一个例子将Nested类型适合解决的问题、应用场景、使用方法串起来,文中所有的DSL都在Elasticsearch6.X+验证通过。
1633 0
|
开发者 Docker 容器
对于Docker设计和使用的一点个人思考
Docker技术的出现在服务器端可以说提供了一个前所未有的方案,对于怎么使用和看待Docker的设计逻辑提供一点个人的见解
1564 0
|
C++ 开发工具 API
.NET Core工程编译事件$(TargetDir)变量为空引发的思考
前言 最近客户反馈,为啥不用xcopy命令代替我自己写的命令来完成插件编译复制: 我的: call "$(SolutionDir)tools\tools\Magicodes.CmdTools.
1500 0