当前位置: 首页 > article >正文

std::optional用法

一、什么是 std::optionalstd::optional是 C17 引入的一个模板类定义在optional头文件中核心作用是表示一个“可能存在也可能不存在”的值。可以把它理解成一个“带状态的容器”当值存在时它保存这个值当值不存在时它标记为“空”无值状态。这解决了传统编程中用特殊值如-1、nullptr表示“无值”的弊端比如特殊值可能本身就是合法业务值让代码更清晰、更安全。二、核心用法代码示例下面通过简单示例展示std::optional的常用操作#includeiostream#includeoptional#includestring// 示例1返回可能存在的整数值std::optionalintfind_positive_number(intnum){if(num0){returnnum;// 有值时直接返回}returnstd::nullopt;// 无值时返回 nullopt空状态}// 示例2返回可能存在的字符串std::optionalstd::stringget_user_name(intuser_id){if(user_id1001){return张三;// 存在值}return{};// 等价于 std::nullopt无值}intmain(){// 1. 检查值是否存在autonum1find_positive_number(10);if(num1.has_value()){// 方法1has_value() 判断是否有值std::cout有效数字num1.value()std::endl;// 取值}autonum2find_positive_number(-5);if(!num2){// 方法2直接用 bool 上下文判断更简洁std::cout无有效数字std::endl;}// 2. 安全取值避免空值访问autonameget_user_name(999);// value_or如果有值则返回值无值则返回默认值std::cout用户名name.value_or(未知用户)std::endl;// 3. 直接访问需确保有值否则抛异常try{autoname2get_user_name(1001);std::cout有效用户名name2.value()std::endl;// 安全autoname3get_user_name(999);std::coutname3.value();// 无值时抛 std::bad_optional_access 异常}catch(conststd::bad_optional_accesse){std::cout\n错误e.what()std::endl;}// 4. 重置为无值状态std::optionalintopt5;opt.reset();// 变为空状态std::cout重置后是否有值std::boolalphaopt.has_value()std::endl;return0;}代码输出有效数字10 无有效数字 用户名未知用户 有效用户名张三 错误bad optional access 重置后是否有值false三、关键特性与注意事项模板特性std::optionalT中T可以是任意类型基本类型、自定义类型、甚至容器但T不能是void、std::nullptr_t也不能是另一个std::optionalC20 后可嵌套但不推荐。内存占用std::optionalT的大小约等于sizeof(T) 11 个字节用于存储“是否有值”的状态无额外堆内存分配值直接存在栈上。空值表示用std::nullopt表示空状态推荐也可以用{}或std::optionalT()初始化空的optional。取值方式value()有值时返回值无值时抛std::bad_optional_access异常value_or(default_val)有值返回值无值返回默认值最安全推荐日常使用解引用*opt直接访问值但需确保有值无值时行为未定义类似访问空指针。四、实际应用场景函数返回值函数可能失败/无结果时如查找数据、解析字符串替代“特殊值注释”的方式。可选参数替代默认参数的部分场景如参数可选且无合适默认值。类成员表示类的可选属性如用户的“手机号”可能存在也可能未填写。总结std::optional是 C17 提供的“可选值”类型用于安全表示“值可能存在/不存在”替代传统特殊值方案核心操作has_value()判断值是否存在、value_or()安全取值、std::nullopt表示空状态优势代码更清晰、避免特殊值歧义、无额外堆内存开销是处理“可选值”的最佳实践。

相关文章:

std::optional用法

一、什么是 std::optional std::optional 是 C17 引入的一个模板类&#xff0c;定义在 <optional> 头文件中&#xff0c;核心作用是表示一个“可能存在也可能不存在”的值。 可以把它理解成一个“带状态的容器”&#xff1a; 当值存在时&#xff0c;它保存这个值&#xf…...

级联 H 桥储能变流器 0.3s投入相内控制;0.7s投入相间控制 储能电池SOC不一致问题: 1

级联 H 桥储能变流器 0.3s投入相内控制&#xff1b;0.7s投入相间控制 储能电池SOC不一致问题&#xff1a; 1??相内电池模块 SOC 不一致&#xff0c;采用一种通过调整子模块调制电压分配改变子模块充放电速度的均衡控制策略&#xff1b; 2??相间电池模块 SOC 不一致&#xf…...

Matlab实战:Newton迭代法解方程时如何避免x=0这个坑?

Matlab实战&#xff1a;Newton迭代法解方程时如何避免x0这个坑&#xff1f; 在数值计算的世界里&#xff0c;Newton迭代法就像一把锋利的手术刀&#xff0c;能够精确地"切除"方程的病根。但即使是这把利器&#xff0c;在遇到x0这个特殊点时也会变得迟钝。想象一下&am…...

Nginx 性能调优与深度监控实战全解析

前言在全球互联网流量持续激增的背景下&#xff0c;Nginx 作为高性能的反向代理、负载均衡器和 HTTP 服务器&#xff0c;已成为企业级 Web 架构中的核心组件。其性能表现直接决定了用户访问体验和业务服务的连续性&#xff0c;一旦 Nginx 出现性能瓶颈或故障&#xff0c;将直接…...

汽车五域架构实战指南:从零开始搭建车载测试环境(含线控技术调试技巧)

汽车五域架构实战指南&#xff1a;从零开始搭建车载测试环境&#xff08;含线控技术调试技巧&#xff09; 在智能汽车研发领域&#xff0c;五域架构已成为电子电气系统的黄金标准。不同于传统分布式ECU架构&#xff0c;五域架构将整车电子系统划分为动力、底盘、座舱、自动驾驶…...

Redis五种数据类型底层

String 底层数据结构是SDS&#xff08;简单动态字符串&#xff09;SDS可以保存文本数据以及二进制数据&#xff08;C语言字符串不行&#xff09;SDS有变量监测字符串长度&#xff0c;因此获取长度为O(1)SDS拼接字符串会自动扩容&#xff0c;且会检查空间要求&#xff0c;因此AP…...

OpenClaw 指令使用方法详解

OpenClaw 指令使用方法详解 一、OpenClaw 简介 OpenClaw 是一个开源的个人 AI 助手框架&#xff0c;支持通过命令行界面&#xff08;CLI&#xff09;进行全面的配置、管理和操作。OpenClaw 能够在本地设备运行&#xff0c;并通过多种通信渠道回复消息&#xff0c;包括 WhatsApp…...

双端布局,Skills领先 百度“龙虾” 全家桶亮相

3月17日&#xff0c;在百度AIDAY龙虾专场上&#xff0c;百度“龙虾”全家桶正式亮相&#xff0c;包括“云端虾”、“手机虾”、“安全虾”多款产品上新&#xff0c;并发布全新自研“桌面虾”产品DuMate和全球首款“家用小龙虾”。百度还宣布上新多款Skills&#xff0c;其中百度…...

AI分镜生成:Qwen-Image-Edit驱动的电影叙事革新

AI分镜生成&#xff1a;Qwen-Image-Edit驱动的电影叙事革新 【免费下载链接】next-scene-qwen-image-lora-2509 项目地址: https://ai.gitcode.com/hf_mirrors/lovis93/next-scene-qwen-image-lora-2509 AI分镜生成技术正在重塑影视创作流程&#xff0c;让专业级故事板…...

直流储能电池充放电仿真与应用研究:基于buck-boost变换器的充放电流模拟与优化

直流储能电池充放电 通过buck-boost变换器对电池进行充放电仿真 充电时&#xff0c;用直流源对电池充电&#xff1b;放电时&#xff0c;电池向负载放电直流储能系统里buck-boost变换器是个神奇的存在——它能优雅地解决电池充放电时的电压匹配问题。今天咱们直接撸起袖子&#…...

手把手教你用kubeadm搭建谷粒商城K8s集群(含镜像加速与Flannel避坑指南)

从零构建谷粒商城Kubernetes集群实战指南 为什么选择Kubernetes部署谷粒商城&#xff1f; 在当今电商系统高并发、高可用的需求背景下&#xff0c;传统单体架构已无法满足业务快速迭代和弹性扩展的需求。谷粒商城作为典型的分布式电商系统&#xff0c;采用微服务架构设计&#…...

Code Connect:革新性设计开发协同工具全链路指南

Code Connect&#xff1a;革新性设计开发协同工具全链路指南 【免费下载链接】code-connect A tool for connecting your design system components in code with your design system in Figma 项目地址: https://gitcode.com/GitHub_Trending/co/code-connect 在现代产…...

自动化毕业设计:从脚本到可维护系统的架构演进

很多同学在做毕业设计时&#xff0c;为了实现“自动化”&#xff0c;往往会写一个简单的脚本。比如&#xff0c;定时爬取一些数据&#xff0c;或者自动处理一批文件。脚本跑起来那一刻很有成就感&#xff0c;但到了项目演示或者老师要求部署的时候&#xff0c;问题就来了&#…...

影墨·今颜模型压缩与量化:在边缘设备部署的可行性探索

影墨今颜模型压缩与量化&#xff1a;在边缘设备部署的可行性探索 最近几年&#xff0c;那些能生成惊艳画作的AI模型&#xff0c;比如影墨今颜&#xff0c;确实让人着迷。但一个现实的问题是&#xff0c;它们往往“个头”巨大&#xff0c;需要强大的云端算力才能运行。这就像拥…...

【vllm】deepep

auto recv_x torch::empty({num_recv_tokens, hidden}, x.options()); 这行代码的作用是&#xff1a; 为当前 GPU 分配一块显存缓冲区&#xff0c;用于存放即将从其他所有 GPU 接收到的 token 数据。 这是 dispatch 操作中一个至关重要的步骤&#xff0c;我们可以把它理解为“…...

【cuda】deepep 学习 cudaHostGetDevicePointer cudaHostAllocMapped

https://blog.csdn.net/KIDGIN7439/article/details/146131893?spm1001.2014.3001.5502 notify_dispatch过程中会计算其他所有rank发送给当前rank多少token&#xff0c;写入到host的moe_recv_counter_mapped&#xff0c;还会计算其他所有rdma_rank发送给当前rank多少token&am…...

收藏!小白程序员必看:手把手带你理解大模型Manus的核心架构与工作原理

本文深入解析了AI智能体Manus的核心架构&#xff0c;包括规划、记忆和工具使用三大模块&#xff0c;并详细阐述了其基于Multi-Agent系统的工作流程。Manus通过自主规划、上下文理解和多代理协作等技术特点&#xff0c;实现了从任务接收、理解、分解到最终交付的完整闭环。文章还…...

颠覆性信息聚合工具全景指南:从知识管理到信息筛选的开源解决方案

颠覆性信息聚合工具全景指南&#xff1a;从知识管理到信息筛选的开源解决方案 【免费下载链接】ALL-about-RSS A list of RSS related stuff: tools, services, communities and tutorials, etc. 项目地址: https://gitcode.com/gh_mirrors/al/ALL-about-RSS 在信息爆炸…...

Qwen3-0.6B-FP8惊艳效果:中文法律条文解读与案例匹配准确率

Qwen3-0.6B-FP8惊艳效果&#xff1a;中文法律条文解读与案例匹配准确率 你有没有想过&#xff0c;一个只有6亿参数的小模型&#xff0c;能在专业法律领域做出什么成绩&#xff1f;今天我要分享的Qwen3-0.6B-FP8&#xff0c;可能会颠覆你对小模型的认知。 这个模型采用了FP8量…...

计算机毕业设计springboot基于内容推荐算法的职业选择推荐系统 基于SpringBoot与内容推荐算法的智能职业匹配平台 SpringBoot驱动的个性化职业发展规划推荐系统

计算机毕业设计springboot基于内容推荐算法的职业选择推荐系统71z9q30d &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。在数字化转型的浪潮中&#xff0c;职业选择已成为个人发展…...

深港无缝清关的未来发展趋势

深港无缝清关的未来发展趋势将不仅依赖于技术的创新&#xff0c;也受到政策的有力支持。随着数字关锁技术的全覆盖&#xff0c;货物在通关时将能借助精准的技术实现实时监控&#xff0c;这将有助于简化通关流程。政策方面&#xff0c;政府通过减轻企业在通关时所需文书工作的负…...

程序员通吃版:从 0 到 1 学 AI Agent!用 LangGraph 六步实现,新手也能上手的实操指南

如果说此前AutoGPT代表的早期自主Agent还停留在“宽泛探索”阶段&#xff0c;那么2025年无疑成为AI Agent真正扎根生产环境的关键元年。与过去追求“全场景覆盖”的通用型Agent不同&#xff0c;如今能够落地企业业务的生产级Agent&#xff0c;正朝着垂直化深耕、边界清晰化、管…...

PX4 Gazebo仿真入门:如何快速替换飞机模型和地图(附常见错误排查)

PX4 Gazebo仿真进阶指南&#xff1a;飞机与地图模型深度定制实战 当你第一次打开PX4的Gazebo仿真环境&#xff0c;看到默认的无人机在空旷的测试场地飞行时&#xff0c;是否想过如何让这个虚拟世界更贴近你的实际需求&#xff1f;无论是为了测试特定机型的气动特性&#xff0c;…...

如何用GPU租用服务高效完成模型微调?|星宇智算实测

模型微调是AI研发的核心环节&#xff0c;涵盖大模型适配、小样本学习、场景化优化等核心需求&#xff0c;其效率与精度直接决定AI项目落地进度。据IDC 2026年最新数据显示&#xff0c;78%的AI研发团队存在“本地GPU资源不足、硬件迭代滞后、运维成本过高”的痛点&#xff0c;无…...

AI 真的会让程序员失业吗?我的答案是 “会,但也不会”

“学编程还有必要吗&#xff1f;AI都能写代码了&#xff0c;以后程序员是不是就没饭吃了&#xff1f;” 每次在评论区看到类似的提问&#xff0c;我都忍不住多琢磨几句——毕竟作为一个分享编程知识的博主&#xff0c;要是程序员这个职业真的被AI彻底取代&#xff0c;我这份“…...

RS232协议在OIF-ITLA-MSA光模块通信中的实战应用(附源码解析)

RS232协议在OIF-ITLA-MSA光模块通信中的实战应用&#xff08;附源码解析&#xff09; 在光电通信领域&#xff0c;OIF-ITLA-MSA协议作为可调谐激光器模块的行业标准&#xff0c;其底层通信机制直接影响设备控制的实时性与可靠性。本文将深入剖析RS232协议在该场景下的工程实现细…...

Qwen3-ASR-0.6B与算法优化:提升语音识别准确率的技巧

Qwen3-ASR-0.6B与算法优化&#xff1a;提升语音识别准确率的技巧 1. 引言 语音识别技术在日常生活中的应用越来越广泛&#xff0c;从智能助手到会议转录&#xff0c;都离不开准确的语音转文字功能。Qwen3-ASR-0.6B作为一款轻量级的语音识别模型&#xff0c;虽然在参数规模上相…...

网络流量分析AI工具:从PCAP中自动识别C2通信和隧道

前言 1. 技术背景 在现代网络攻防对抗中&#xff0c;命令与控制&#xff08;Command and Control, C2&#xff09; 通信是攻击链的核心环节。攻击者在突破边界后&#xff0c;需要通过隐蔽的信道对其植入的恶意软件或后门进行远程控制&#xff0c;执行数据窃取、横向移动等恶意…...

UI-TARS-desktop与Anaconda集成的数据科学工作流

UI-TARS-desktop与Anaconda集成的数据科学工作流 1. 引言 数据科学家每天都要面对繁琐的重复性任务&#xff1a;环境配置、数据清洗、可视化分析、模型训练……这些工作占据了大量宝贵时间。想象一下&#xff0c;当你需要快速测试一个新算法时&#xff0c;却要花半天时间配置…...

datetime 和 timestamp 核心区别与用法

1. 核心概念类型本质时区影响适用场景datetime存储 “绝对时间字符串”无&#xff0c;存啥显示啥绝大多数业务场景&#xff08;订单时间、创建时间等&#xff09;timestamp存储 “Unix 时间戳&#xff08;秒&#xff09;”自动按数据库时区转换跨时区同步的场景&#xff08;全球…...