AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 23
std::variant
: 值作为状态模型
C++ SELF
等级 23,
课时 0
讲解
std::variant
如何通过类型表达“结果作为状态”的含义:它与
std::optional
以及
enum class
+数据 的组合有什么区别、如何通过
index()
和
std::holds_alternative
检查活动替代项、如何通过
std::get_if
安全地提取值,以及为什么这比使用诸如
-1
之类的“魔法值”要好。最后 — 一个简短的 TodoCLI 示例和常见的使用错误。
std::visit:通过 visitor 处理 std::variant
C++ SELF
等级 23,
课时 1
讲解为什么在使用
std::variant
时需要
std::visit
:如何避免使用一片«if 树»的
std::get_if
,visitor 的实现方式(泛型 lambda、重载、带
struct
的
operator()
),如何从
std::visit
返回值,以及如何在带有类型化命令和解析错误的迷你 CLI 任务跟踪器中应用它。
std::expected<T, E> 作为“成功/错误”模型
C++ SELF
等级 23,
课时 2
我们来分析为什么类似
-
1
这样的“魔法值”和空字符串会破坏函数契约,
std::expected<T, E>
在根本上如何不同于
std::optional<T>
,如何通过
std::unexpected
返回错误,以及如何通过检查
if
(
has_value()
,
value()
,
error()
)有纪律地处理结果。在示例中展示基于
std::from_chars
的无异常数字解析,以及在 CLI 风格应用中如何向上“抛出”错误。
错误设计 — 代码、消息、上下文
C++ SELF
等级 23,
课时 3
解析在 C++23 中实用的错误设计:为什么“错误作为字符串”会很快变成脆弱的代码、如何将错误封装为数据(
ErrorCode
+ 消息 + 上下文)、如何通过
format_error
统一格式化错误,以及如何使用
std::expected
返回“值或错误”。通过示例展示
ParseError
/
InvalidInput
/
NotFound
/
IoError
分类,使用
std::from_chars
进行解析,并在迷你 CLI 中处理错误。
错误策略
C++ SELF
等级 23,
课时 4
解析为什么项目需要统一的错误策略:为什么“工作”函数不应打印诊断信息,如何通过
std::expected
将错误向上抛出,在哪儿以及如何统一格式化消息(
format_error
),分离
std::cout
/
std::cerr
有何用,如何通过
log(...)
引入最小化日志记录,并通过将
ErrorCode
→
int
映射来集中管理进程退出码。
Please enable JavaScript to continue using this application.