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

通过实际的例子和代码演示,可以更好地理解 `optional` 的使用方式和应用场景

当然,让我们通过一些实际的例子来演示 std::optional 的使用方式和应用场景。

场景 1:函数返回值

假设我们有一个函数,它尝试从字符串中解析一个整数,但如果字符串不是一个有效的整数,我们希望返回一个错误状态。

#include <optional>
#include <string>
#include <iostream>std::optional<int> ParseInt(const std::string& str) {try {int value = std::stoi(str);return value; // 成功时返回一个包含值的optional} catch (const std::invalid_argument& e) {return std::nullopt; // 失败时返回一个空的optional}
}int main() {auto value1 = ParseInt("123");if (value1) {std::cout << "Parsed value: " << *value1 << std::endl;} else {std::cout << "Failed to parse integer." << std::endl;}auto value2 = ParseInt("abc");if (!value2) {std::cout << "Failed to parse integer." << std::endl;}
}

场景 2:延迟初始化

有时候,对象的初始化可能依赖于某些条件,我们可以使用 std::optional 来延迟初始化。

#include <optional>
#include <iostream>class ExpensiveObject {
public:ExpensiveObject() {// 假设构造函数有一些昂贵的操作std::cout << "ExpensiveObject created." << std::endl;}
};std::optional<ExpensiveObject> CreateExpensiveObject(bool create) {if (create) {return ExpensiveObject(); // 条件满足时创建对象} else {return std::nullopt; // 条件不满足时返回空的optional}
}int main() {auto maybeObject = CreateExpensiveObject(true);if (maybeObject) {// 使用对象}
}

场景 3:异常安全编程

使用 std::optional 可以避免在异常发生时资源未被正确清理的问题。

#include <optional>
#include <memory>
#include <iostream>std::optional<std::unique_ptr<int>> CreateSafely(bool safe) {try {if (!safe) throw std::runtime_error("Failed to create");auto ptr = std::make_unique<int>(42);return ptr; // 成功时返回包含智能指针的optional} catch (...) {return std::nullopt; // 异常时返回空的optional}
}int main() {auto maybePtr = CreateSafely(false);if (maybePtr) {std::cout << "Value: " << **maybePtr << std::endl;} else {std::cout << "Creation failed, no resource leak." << std::endl;}
}

场景 4:可选配置参数

在配置类中,某些参数可能是可选的,使用 std::optional 可以清晰地表达这一点。

#include <optional>
#include <string>
#include <iostream>class Config {
public:std::optional<std::string> optionalParam;// 其他配置参数...
};int main() {Config config;config.optionalParam = "Some value"; // 可选参数被设置if (config.optionalParam) {std::cout << "Optional parameter is set to: " << *config.optionalParam << std::endl;} else {std::cout << "Optional parameter is not set." << std::endl;}
}

这些例子展示了 std::optional 在不同场景下的应用,包括错误处理、延迟初始化、异常安全编程和可选配置参数。通过这些示例,你可以更好地理解 std::optional 的强大功能和灵活性。

相关文章:

通过实际的例子和代码演示,可以更好地理解 `optional` 的使用方式和应用场景

当然&#xff0c;让我们通过一些实际的例子来演示 std::optional 的使用方式和应用场景。 场景 1&#xff1a;函数返回值 假设我们有一个函数&#xff0c;它尝试从字符串中解析一个整数&#xff0c;但如果字符串不是一个有效的整数&#xff0c;我们希望返回一个错误状态。 #…...

Java 电商秒杀系统优化实战:实现进阶示例详解与 RabbitMQ 配置

上一篇博客介绍了使用消息队列、异步处理等技术构建 Java 电商秒杀系统的基本思路&#xff0c;本文将进一步优化代码实现&#xff0c;并提供更详细的代码示例和 RabbitMQ 配置&#xff0c;助您构建更健壮、高效的秒杀系统。 一、 代码优化 1. 接口限流 在 SeckillController…...

路径规划 | 基于狼群算法的无人机路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 路径规划 | 基于狼群算法的无人机路径规划&#xff08;Matlab&#xff09; 狼是一种群居性动物&#xff0c;社会分工明确&#xff0c;通过承担各自的责任与团结协作&#xff0c;共同促进整个狼群的生存与发展。狼群算…...

13-python函数返回值和装包的后续提取数据方法——解包

1.1 参数解包 不定长参数简单来讲就是装包&#xff0c;把多个参数装到一个元组或者装到字典中&#xff0c;就叫做装包 Ctrld可以快速向下复制 传递实参时&#xff0c;也可以在序列类型的参数前添加星号&#xff0c;这样他会自动将序列中的元素依次作为参数传递 注意&#x…...

I. 对线

https://codeforces.com/gym/103186/problem/I 一开始感觉操作挺复杂的 但是写过Chino的数列 - 洛谷 发现可以通过矩阵来实现swap操作&#xff0c;就想能不能用线段树维护矩阵来写 有三排兵线&#xff0c;我们维护区间和&#xff0c;因此初始矩阵就有了 接下来分析每个操作的…...

Topsis法模型(评价类问题)

目录 本文章内容参考&#xff1a; 一. 概念 二. 特点和适用范围 三. 实现步骤 四. 代码实现 本文章内容参考&#xff1a; TOPSIS法模型讲解(附matlab和python代码) 【数学建模快速入门】数模加油站 江北_哔哩哔哩_bilibili 一. 概念 TOPSIS&#xff08;Technique for O…...

HPA 与pod调度

HPA 自动更新工作负载资源&#xff08;例如 Deployment 或者 StatefulSet&#xff09;&#xff0c; 目的是自动扩缩工作负载以满足需求。 绑定到deploy上&#xff0c;控制pod 依托于metrics-server HorizontalPodAutoscaler 水平pod自动扩缩&#xff1a;意味着对增加的负…...

jupyter下载

https://blog.csdn.net/qq_48372575/article/details/125630622 我下面是CPU运行的&#xff0c;GPU链接在上面 Anaconda下载 https://docs.anaconda.com/miniconda/miniconda-other-installer-links/ 参考链接&#xff1a; https://blog.csdn.net/qq_48372575/article/detai…...

蓝桥杯双周赛 第 16 场 小白入门赛 解题报告 | 珂学家 | 七夕娱乐场

前言 题解 因为这场七夕节&#xff0c;所以出的特别友好。 整体还是偏思维。 T6 额外提供组合数学解&#xff0c;还是蛮有趣的。 A. 喜鹊罢工 题型: 签到 365 可以有多少个 7 组成 365可以有多少个7组成 365可以有多少个7组成 向上取整即可 #include <iostream>usi…...

[C++] 深入理解面向对象编程特性 : 继承

文章目录 继承的概念与定义继承的定义定义格式不同继承方式与继承的基类中访问限定符间的影响C中的继承和访问控制总结父类的private成员在子类中的访问限制protected成员的使用场景成员访问方式总结继承方式的默认值实际应用中的继承方式 示例代码 OOP中类之间的关系“is a” …...

汇昌联信科技做拼多多电商怎么引流?

在互联网经济高速发展的今天&#xff0c;电商平台如雨后春笋般涌现&#xff0c;其中拼多多以其独特的社交电商模式迅速崛起。对于汇昌联信科技而言&#xff0c;如何在拼多多平台上有效引流&#xff0c;成为提升销量和品牌知名度的关键。本文将深入探讨汇昌联信科技在拼多多电商…...

公网ip和私网ip的区别

1.接入方式不同\n公网IP以公网连接Internet上的非保留地址&#xff0c;私网IP则是局域网上的IP&#xff0c;通过NAT才能够与公网进行通信。 2.特点不同\n公网IP由国际互联网络信息中心InterNIC负责,将IP地址分配给注册并向InterNIC提出申请的机构或组织。私网IP则是为节省可分…...

【开发踩坑】windows查看jvm gc信息

windows查看jvm gc信息 EZ 找出java进程PID 控制面板----搜索任务管理器---- 任务管理器----搜索 java----详细信息 这里PID是4856 cmd jstat gc面板 reference&#xff1a; jstat命令...

时间序列预测 | CEEMDAN+CNN+Transformer多变量时间序列预测(Python)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 时间序列预测 | CEEMDANCNNTransformer多变量时间序列预测&#xff08;Python&#xff09; 时间序列预测 创新点 多尺度特征提取&#xff1a;CEEMDAN将复杂的时间序列分解成多个IMFs&#xff0c;使得CNN和Transforme…...

vue3--实现vue2插件JSONPathPicker的路径获取功能

背景 最近在进行vue2项目升级为vue3。 在项目中需要获取json某些字段的路径&#xff0c;vue2中使用JSONPathPicker &#xff0c;但是该插件不支持vue3&#xff0c;vue3中也没有相应的模块有该功能。 实现目标&#xff1a; 原vue2中JSONPathPicker实现的功能&#xff1a; 查…...

SuccBI+低代码文档中心 — 可视化分析(仪表板)(上)

有关仪表板的设计器&#xff1a; 查询设置 由于仪表板的设计器是所见即所得的&#xff0c;可以将当前制作的内容和数据的查询结果实时展示在界面中&#xff0c;当引入到仪表板的模型数据量较大时&#xff0c;为了提高设计器界面的查询性能&#xff0c;提供了以下两种方法&…...

P3156 【深基15.例1】询问学号

昨天我发布了关于数据结构线性表的学习知识&#xff08;【数据结构】顺序表-CSDN博客&#xff09;。所谓“纸上得来终觉浅”&#xff0c;光看不练可不行&#xff0c;下面我们来看一下顺序表的习题。 题目链接 【深基15.例1】询问学号 - 洛谷 题目解读 题目描述了一个场景&…...

详解Xilinx FPGA高速串行收发器GTX/GTP(5)--详解8B10B编解码

目录 1、8B/10B编码是什么? 2、8B/10B编码的规则 3、两个例子 4、GTX的8B/10B编码 5、Verilog实现 文章总目录点这里:《FPGA接口与协议》专栏的说明与导航 1、8B/10B编码是什么? 简单来说,8B/10B编码就是将原本是8bits的数据,按照一定的规则扩展编码到10b…...

python 画多盘的写放大曲线方法

在服务器测试中我们经常会遇见客户要求画出每个SSD的WAF曲线&#xff0c;也就是写放大&#xff0c;通常的做法就是我们每隔10分钟记录一下每个SSD的host写入量和nand写入量&#xff0c;下面我们介绍一下python处理多盘的WAF的做法 如图所示 假设这是一个记录多盘的写入量信息的…...

计算机网络TCP/UDP知识点

这是一些在学习过程中关于计算机网络八股文的一些知识点记录&#xff1a; TCP/UDP TCP怎么保证可靠性 1.序列号&#xff0c;确认应答&#xff0c;超时重传 数据到达接收方&#xff0c;接收方需要发出一个确认应答&#xff0c;表示已经收到该数据段&#xff0c;并且确认序号…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...