用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
SQL-Server
›
c++的非常处理机制(try、catch、throw)
c++的非常处理机制(try、catch、throw)
锦通
论坛元老
|
2024-8-13 12:20:39
|
显示全部楼层
|
阅读模式
楼主
主题
1589
|
帖子
1589
|
积分
4767
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
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
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
锦通
论坛元老
这个人很懒什么都没写!
楼主热帖
漏洞利用
快速入手node.js
vue3 - 最新详细实现 “拖曳式课程表“ ...
奇怪,为什么ArrayList初始化容量大小 ...
医院HIS体系厂家统计
如何成为一位人心所向的管理者?我的经 ...
理解MVCC
Kubernetes(k8s)pod详解
八、MySQL之事务控制语言
Vue实现复制粘贴功能
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
Postrge-SQL技术社区
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表