std::expected 是 C++23 引入的值或错误二选一的类模板,语义明确、零成本、需显式处理;支持 and_then/or_else 链式调用,区别于 optional(无错误上下文)和异常(非预期错误),适用于 I/O、解析等常规可恢复错误场景。
std::expected 是 C++23 引入的标准库新类型,用于明确区分成功结果与错误信息,替代传统上用返回值+全局 errno、异常、或自定义 pair/variant 的做法。它不是“可选值”,而是“预期得到某个值,否则得到一个错误”——语义更清晰,调用方必须显式处理两种可能。
std::expected
模板,内部保证两者互斥且仅存其一。T 通常为返回的数据(如 int、string、自定义对象),E 通常是 std::error_code、std::string 或枚举类(如 my_error)。它不抛异常,也不依赖副作用,符合现代 C++ 的显式、零成本抽象原则。
std::expected result{42};
std::expected err{std::unexpect, "file not found"};
if (result.has_value()) { /* 成功 */ } else { /* 处理 result.error() */ }
std::expected 支持类似 Rust Result 的组合操作,让多个可能失败的操作自然串联,避免层层嵌套 if 判断。
and_then:当前成功时执行函数,该函数也返回 expected;失败则短路,保留原错误or_else:当前失败时执行函数,用于错误恢复或转换例如:
auto res = read_config()
.and_then(parse_config)
.and_then(validate_config)
.or_else([](const auto& e) { return fallback_config(); });
不是 std::optional 的替代品:optional 表示“可能没有值”,但不说明“为什么没有”;expected 明确携带错误上下文,适合系统级 I/O、解析、校验等有丰富失败原因的场景。
不是异常的替代品:异常适合意外、不可恢复的错误(如内存耗尽);expected 适合预期中可能发生的常规错误(如文件不存在、JSON 格式错误),调用方应主动检查而非放任传播。
从 C++23 开始,优先在新接口中用 std::expected 替代 “int 返回码 + out 参数” 或 “throw std::runtime_error”。尤其适用于:
注意:目前主流编译器(GCC 13+、Clang 16+、MSVC 19.35+)已支持,需开启 -std=c++23。标准库实现基于 头文件,无需第三方依赖。
# js
# json
# 栈
# ai
# c++
# 区别
# 字符串解析
# 标准库
# 为什么
# rust
# String
# if
# throw
# Error
# const
# auto
# 字符串
# errno
# int
# 接口
# 类模板
# 对象
# 链式
# 适用于
# 自定义
# 是一个
# 平铺直叙
# 也不
# 多个
# 两种
# 可在
# 不存在
相关文章:
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
,巨量百应是干嘛的?
MySQL查询结果复制到新表的方法(更新、插入)
如何获取免费开源的自助建站系统源码?
建站之星后台密码如何安全设置与找回?
安徽网站建设与外贸建站服务专业定制方案
想学网站制作怎么学,建立一个网站要花费多少?
实例解析angularjs的filter过滤器
如何在建站主机中优化服务器配置?
建站之星3.0如何解决常见操作问题?
如何选购建站域名与空间?自助平台全解析
建站之星代理商如何保障技术支持与售后服务?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
电商平台网站制作流程,电商网站如何制作?
制作电商网页,电商供应链怎么做?
如何在腾讯云免费申请建站?
名字制作网站免费,所有小说网站的名字?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何破解联通资金短缺导致的基站建设难题?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
广州美橙建站如何快速搭建多端合一网站?
建站之星如何助力企业快速打造五合一网站?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
开心动漫网站制作软件下载,十分开心动画为何停播?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何快速使用云服务器搭建个人网站?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
,怎么用自己头像做动态表情包?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何快速生成可下载的建站源码工具?
如何在IIS7上新建站点并设置安全权限?
h5在线制作网站电脑版下载,h5网页制作软件?
如何通过多用户协作模板快速搭建高效企业网站?
宝塔新建站点为何无法访问?如何排查?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何高效配置IIS服务器搭建网站?
,交易猫的商品怎么发布到网站上去?
建站之星如何实现五合一智能建站与营销推广?
成都网站制作报价公司,成都工业用气开户费用?
如何快速建站并高效导出源代码?
详解jQuery停止动画——stop()方法的使用
如何用IIS7快速搭建并优化网站站点?
如何在橙子建站上传落地页?操作指南详解
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
如何选择网络建站服务器?高效建站必看指南
如何通过cPanel快速搭建网站?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
*请认真填写需求信息,我们会在24小时内与您取得联系。