std::expected 是 C++23 引入的值优先、错误显式的标准化错误处理工具,用于替代返回码或自定义包装类型,适用于文件解析、配置读取等可预期失败场景,不取代异常。
std::expected 是 C++23 引入的标准化错误处理工具,用来替代传统返回码、异常或自定义包装类型(如 std::optional + 状态码),实现“值优先、错误显式”的函数返回风格。它不是万能异常替代品,而是为预期可能失败但不属异常语义的场景(比如文件解析、配置读取、网络响应解码)提供更清晰、更安全、更可组合的返回接口。
模板形式为 std::expected,其中 T 是成功时携带的值类型,E 是失败时携带的错误类型(通常为 std::error_code、std::string 或自定义错误枚举)。它内部只保存 T 或 E 中的一个,不可同时存在。
std::expected ok{42}; 或 std::make_expected(42);
std::expected err{std::unexpect, "file not found"}; 或 std::make_unexpected("timeout");
if (res.has_value()) { /* 成功 */ } else { /* 失败,用 res.error() 取错误 */ }
当多个操作需按顺序执行、且任一环节失败就终止并透传错误时,and_then 是核心工具。它只在当前为 value 时调用传入的函数,并自动将该函数返回的 expected “扁平化”——避免嵌套 expected。
auto res = parse_json(str).and_then(validate_schema).and_then(extract_user_id);std::expected,类型需兼容(错误类型最好
一致)unexpected,后续函数不执行,整个链直接返回该错误当需要对特定错误做修复、降级或日志记录时,or_else 接收一个以 const E& 为参数的函数,返回新的 expected;而 value_or 提供简单默认值兜底(仅适用于可默认构造或提供默认值的 T)。
auto id = fetch_user_id().or_else([](const std::error_code& ec) { return fallback_user_id(); });int timeout = get_timeout_config().value_or(3000); // 失败时用 3000value_or 会强制移动或拷贝 T,若 T 构造代价高或不可拷贝,应改用 and_then + 显式判断std::expected 不取代异常,也不等价于 std::optional:
expected 用于业务逻辑中可预见、可分类处理的失败(如“用户不存在”、“配置缺失”)std::optional 只能表达“有/无值”,无法携带错误原因;expected 明确区分“成功值”和“失败原因”,支持错误类型多态和模式匹配(配合 std::visit 自定义访问器)expected parse(const std::string&) 比 bool parse(..., Data& out) 或抛异常更直观、更易组合不复杂但容易忽略:别把所有函数都改成 expected,优先用于 I/O、解析、校验等天然带失败语义的函数;保持错误类型轻量、可比较、可输出;搭配 std::error_code + std::system_category() 或自定义错误类别,能更好融入系统生态。
# js
# json
# go
# 工具
# c++
# 状态码
# 区别
# String
# if
# 多态
# Error
# const
# auto
# bool
# int
# 接口
# 值类型
# 访问器
# transform
# 自定义
# 链式
# 默认值
# 也不
# 多个
# 适用于
# 不存在
# 只在
# 将该
# 时用
相关文章:
建站之星如何保障用户数据免受黑客入侵?
招贴海报怎么做,什么是海报招贴?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
宝塔Windows建站如何避免显示默认IIS页面?
建站之星图片链接生成指南:自助建站与智能设计教程
如何在阿里云部署织梦网站?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
高防服务器租用指南:配置选择与快速部署攻略
,网站推广常用方法?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
nginx修改上传文件大小限制的方法
阿里云网站制作公司,阿里云快速搭建网站好用吗?
如何在IIS管理器中快速创建并配置网站?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
攀枝花网站建设,攀枝花营业执照网上怎么年审?
成都网站制作报价公司,成都工业用气开户费用?
如何登录建站主机?访问步骤全解析
如何通过可视化优化提升建站效果?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何获取免费开源的自助建站系统源码?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
建站主机选虚拟主机还是云服务器更好?
如何用免费手机建站系统零基础打造专业网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
湖北网站制作公司有哪些,湖北清能集团官网?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
如何续费美橙建站之星域名及服务?
建站主机如何选?高性价比方案全解析
建站之星云端配置指南:模板选择与SEO优化一键生成
建站主机CVM配置优化、SEO策略与性能提升指南
建站10G流量真的够用吗?如何应对访问高峰?
如何在Golang中使用replace替换模块_指定本地或远程路径
行程制作网站有哪些,第三方机票电子行程单怎么开?
在线教育网站制作平台,山西立德教育官网?
C#怎么使用委托和事件 C# delegate与event编程方法
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何在阿里云香港服务器快速搭建网站?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
建站之星24小时客服电话如何获取?
如何获取开源自助建站系统免费下载链接?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何快速登录WAP自助建站平台?
已有域名如何快速搭建专属网站?
网站app免费制作软件,能免费看各大网站视频的手机app?
建站为何优先选择香港服务器?
如何快速搭建响应式可视化网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。