AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 53
深入理解 try/catch/throw
C++ SELF
等级 53,
课时 0
我们来拆解 C++ 中的异常处理:
throw
是如何工作的,应该把
try
/
catch
的边界放在哪里,异常如何沿着调用栈“向上冒泡”,什么是栈展开(
stack unwinding
),以及为什么在这个过程中会调用析构函数(RAII)。我们还会讲到通过
throw
;
进行重新抛出,构建一个实用的迷你项目(命令解析器 +
main
中的循环),并总结典型错误。
std::exception 与 what():基础实践
C++ SELF
等级 53,
课时 1
我们来解析为什么在 C++ 里需要基类异常
std::exception
,
what()
方法如何工作,为什么“通用处理器”通常写成
catch
(
const
std::exception
&
e),为什么
catch
(
std::exception
e)(对象切片)是危险的,以及如何在不保存从
what()
返回的悬垂
const char*
的情况下,安全地输出诊断信息。
标准异常 <stdexcept>
C++ SELF
等级 53,
课时 2
我们来分析在 C++ 中如何有意识地从头文件
<stdexcept>
中选择标准异常:何时抛出
std::runtime_error
(运行时条件问题)、何时抛出
std::invalid_argument
(违反了输入数据合同)、以及何时抛出
std::out_of_range
(索引/值超出允许边界)。另外——从具体到通用的
catch
顺序、使用
e.what()
以及基于 CLI 的小练习,涉及
std::vector
、
std::stoi
与
at()
。
自定义异常:命名、消息与上下文
C++ SELF
等级 53,
课时 3
我们来分析,为什么在 C++ 中要定义自己的异常类型,而不是只用通用的
std::runtime_error
;如何选择有意义的错误类别(
ParseError
与
CommandError
);在
what()
里该写什么;以及如何不是用字符串,而是通过异常对象的字段来传递上下文。我们会用一个 CLI“支出记账”示例,展示错误归一化、异常转换,以及在
main
中进行处理。
什么时候适合使用异常
C++ SELF
等级 53,
课时 4
我们来分析在 C++ 中如何在异常和“将错误作为值”之间做选择:什么时候适合使用
throw
(违反契约、内部不变量被破坏、深层错误需要在上层处理),什么时候更适合通过
std::optional
或
std::variant
返回结果。以 TaskCLI 为例,我们展示处理边界(在哪里捕获
try
/
catch
)以及 API 设计中的典型错误。
Please enable JavaScript to continue using this application.