论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
SQL-Server
›
c++的非常处理机制(try、catch、throw)
c++的非常处理机制(try、catch、throw)
锦通
论坛元老
|
2024-8-13 12:20:39
|
显示全部楼层
|
阅读模式
楼主
主题
1025
|
帖子
1025
|
积分
3075
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
在C++中,非常处理机制通过try、catch和throw来管理程序运行时的错误环境。非常处理机制使得程序可以大概在出现错误时优雅地恢复或处理错误,而不是让程序崩溃。以下是关于C++非常处理的详细解说
1.
throw 关键字
throw用于抛出非常。非常是一个表示错误或非常环境的对象。今世码中出现问题时,可以使用throw来创建一个非常对象并将其抛出。
示例
:
#include <iostream>
#include <stdexcept> // std::runtime_error
void mightGoWrong() {
bool errorOccurred = true; // 假设发生了错误
if (errorOccurred) {
throw std::runtime_error("Something went wrong");
}
}
int main() {
try {
mightGoWrong();
} catch (const std::exception& e) {
std::cout << "Caught an exception: " << e.what() << std::endl;
}
return 0;
}
复制代码
2.
try 关键字
try块用于包含可能会抛出非常的代码。如果try块中的代码抛出了非常,那么控制流将转移到相应的catch块来处理该非常。
示例
:
#include <iostream>
void mightGoWrong() {
throw std::runtime_error("An error occurred");
}
int main() {
try {
mightGoWrong(); // 可能抛出异常
} catch (const std::exception& e) {
std::cout << "Caught exception: " << e.what() << std::endl;
}
return 0;
}
复制代码
3.
catch 关键字
catch用于捕获try块中抛出的非常。catch块指定了要捕获的非常范例,并处理该非常。可以定义多个catch块来捕获差别范例的非常。
示例
:
#include <iostream>
#include <stdexcept>
void mightGoWrong() {
throw std::runtime_error("Runtime error occurred");
}
int main() {
try {
mightGoWrong();
} catch (const std::runtime_error& e) {
std::cout << "Caught runtime_error: " << e.what() << std::endl;
} catch (const std::exception& e) {
std::cout << "Caught exception: " << e.what() << std::endl;
}
return 0;
}
复制代码
非常处理机制的工作流程
抛出非常
: 当throw语句被执行时,程序会创建一个非常对象并将其抛出。控制流将立即转移到try块外的catch块中。
捕获非常
: catch块负责捕获和处理非常。它根据非常的范例和参数,决定怎样处理非常。catch块可以捕获详细范例的非常,也可以捕获基类非常(如std::exception)。
非常流传
: 如果try块中抛出的非常没有被相应的catch块捕获,非常会沿着调用栈向上流传,直到找到匹配的catch块为止。如果在栈的顶端仍然没有捕获到该非常,程序将终止。
自定义非常
可以创建自定义非常类,继承自标准非常类(如std::exception)或其他非常类。
示例
:
#include <iostream>
#include <exception>
class MyException : public std::exception {
public:
const char* what() const noexcept override {
return "MyException occurred";
}
};
void mightGoWrong() {
throw MyException();
}
int main() {
try {
mightGoWrong();
} catch (const MyException& e) {
std::cout << "Caught MyException: " << e.what() << std::endl;
} catch (const std::exception& e) {
std::cout << "Caught exception: " << e.what() << std::endl;
}
return 0;
}
复制代码
非常安全
基本保证
: 程序在非常发生时,能保证程序状态的一致性。
强保证
: 在非常发生时,程序的状态与没有非常时完全相同。
无非常保证
: 函数在任何环境下都不会抛出非常。
在C++中,非常处理机制使得程序可以更优雅地处理运行时错误,通过适当的try、catch和throw使用,可以进步程序的结实性和容错能力。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
锦通
论坛元老
这个人很懒什么都没写!
楼主热帖
漏洞利用
vue3 - 最新详细实现 “拖曳式课程表“ ...
快速入手node.js
奇怪,为什么ArrayList初始化容量大小 ...
医院HIS体系厂家统计
如何成为一位人心所向的管理者?我的经 ...
Kubernetes(k8s)pod详解
如何在文章中设置灰色文本框(正文底色 ...
Vue实现复制粘贴功能
理解MVCC
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
分布式数据库
Oracle
Mysql
MES
虚拟化与私有云
物联网
网络安全
移动端开发
程序人生
快速回复
返回顶部
返回列表