尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
std1.97.1——Option模块总览
目录0. 引言1. Option枚举简介2. Option与指针(可空指针)3. 问号运算符?(必用不用代码太繁琐了)4. 内存表示(暂时不知道这部分讲得什么玩意)参考0. 引言OptIon枚举上的方法单独在Option模块细览中。std::option模块总览没有对常用方法进行非常详细的展开。1. Option枚举简介Option类型表示一个可选值每个Option要么是Some并包含一个值要么是None不包含值。Option在Rust代码中很常用有如下用途初始值。对于并非在整个输入范围内都有定义的函数用作返回值。用于报告简单错误的返回值其中出错时返回None。可选的结构体字段。可以被借出或取走的结构体字段。可选的函数参数。可空指针。将事物从复杂情境中交换出来。Option通常与模式匹配配合使用以查询值的存在并采取行动始终处理None的情况。2. Option与指针(可空指针)Rust的指针类型必须始终指向有效的位置不存在空引用。相反Rust有可选指针比如OptionBoxT。fncheck_optional(optional:OptionBoxi32){matchoptional{Some(p)println!(has value {p}),Noneprintln!(has no value),}}fnmain(){letoptionalNone;check_optional(optional);letoptionalSome(Box::new(9000));check_optional(optional);}3. 问号运算符?(必用不用代码太繁琐了)与Result类型类似当编写调用许多返回Option类型的函数的代码时处理Some/None可能很繁琐。问号运算符?隐藏了一些将值向上传播到调用栈的代码。它能将下面这段代码fnadd_last_numbers(stack:mutVeci32)-Optioni32{letastack.pop();letbstack.pop();match(a,b){(Some(x),Some(y))Some(xy),_None,}}替换为fnadd_last_numbers(stack:mutVeci32)-Optioni32{Some(stack.pop()?stack.pop()?)}在表达式末尾加上?将得到Some解包后的值除非结果是None此时None会从外层函数提前返回。?可以用在返回Option的函数中因为它提供了None的提前返回。4. 内存表示(暂时不知道这部分讲得什么玩意)Rust保证对以下类型T进行优化使得OptionT与T具有相同的大小、对齐和函数调用ABI。因此当T是这些类型之一时将类型T的值t转换为类型OptionT(产生值Some(T))以及将类型OptionT的值Some(t)转换为类型T(产生值t)没有任何运行开销。在以下某些情况中Rust进一步保证transmute::_, OptionT([pu8; sizeof::T()])无开销并产生Option::T::Nonetransmute::_, [u8; sizeof::T()](Option::T::None)无开销并产生[0u8; size_of::T()]这些情况由第二列标识(Sized指的是类型的大小在编译时已知)T在[0u8; size_of::T()]和Option::T::None之间转换是否无开销BoxU, Global(默认Box)U: SizedUU: Sizedmut UU: Sized所有函数指针fn变体始终num::NonZero*始终ptr::NonNullUU: Sized#[repr(transparent)]标记的、且内部只包含一个此列表中类型的结构体当内部类型满足条件时在某些条件下上述类型T在包裹在Result中时也会进行优化上面这种优化称为空指针优化NPO。对于上面的情况可以进一步保证从T的所有有效值transmute到OptionT以及从Some::T(_)transmute到T(但将None::T转换到T是未定义行为参考1、Rust std::option
RELATED

相关推荐

YoloV8目标检测模型的运行与训练及数据标注

YoloV8目标检测模型的运行与训练及数据标注

文章目录1. 环境配置1.1 环境清单1.2 我打包好的anaconda虚拟环境2. 模型下载2.1 YOLOv8-Nano下载地址2.2 YOLOv8m COCO数据集预训练模型下载地址3.基于摄像头运行和中文标签显示3.1 提前下载Arial.Unicode.ttf字体文件,并安装,下载地址如下:…

📅 2026/10/12 11:52:04
用 Boss批量推送 1.2.0 自动发自定义招呼语,批量投简历省出半天时间

用 Boss批量推送 1.2.0 自动发自定义招呼语,批量投简历省出半天时间

用 Boss批量推送 1.2.0 自动发自定义招呼语,批量投简历省出半天时间 【免费下载链接】boss_batch_push Boss直聘批量投简历,批量发送自定义招呼语 项目地址: https://gitcode.com/gh_mirrors/bo/boss_batch_push 在Boss直聘上逐一点"立即沟通…

📅 2026/10/11 3:34:30
65-MCGS昆仑通态触摸屏工程模板|新风空调机组HMI界面设计参考文件

65-MCGS昆仑通态触摸屏工程模板|新风空调机组HMI界面设计参考文件

温馨提示:文末有联系方式 专业级65-MCGS新风空调机组触摸屏模板 模板来源与兼容性说明 本文件基于昆仑通态(MCGS)65系列组态软件开发,专为新风空调机组系统定制,全面支持TPC系列高性能工业触摸屏,兼容主流…

📅 2026/10/8 2:32:10
MORE NEWS

更多资讯

📰

Three.js WebGL粮仓3D可视化:物联网温湿度空间定位实战

简介:本资源是一个基于Vue.js与Three.js开发的物联网粮仓3D可视化管理系统,面向前端开发者、WebGL初学者及智慧农业/仓储数字化从业者,解决传统粮仓监控信息抽象、空间感知弱、数据交互不直观等管理痛点。项目完整实现3D场景渲染、实时环境数…

📰

诺瓦星云科技与老虎集团Java笔试对比:底层原理与业务场景的备考策略

1. 拆解这场笔试:两家公司到底在考什么先说说我为什么想聊这个话题。前段时间帮几个学弟学妹复盘秋招,发现一个很普遍的现象:很多人刷了几百道LeetCode,结果一到真实笔试就懵了。尤其是像诺瓦星云科技和老虎集团这种,笔…

📰

Wireshark入门实验:从HTTP抓包到TCP三次握手全解析

如果你正准备开始学习网络协议分析,第一次接触到 Wireshark 的 Introduction 实验,这篇文章就是为你准备的。Wireshark 是目前最主流的图形化抓包工具,它能把网卡上经过的每一个数据包“拍下来”并解析成人类能看懂的协议字段。这个入门实验的…

📰

大厂实习机试攻略:算法题型、高频考点与备考时间线

每年三四月份,大批同学开始投暑期实习简历,其中通信和终端行业头部厂商的机试环节,是很多计算机相关专业学生绕不开的一道坎。我当时参加的就是2021届的暑期实习机试,整体感受是:题量不大但时间紧,表面考算…

📰

Wireshark入门实验全解析:抓包看懂TCP、DNS与HTTP协议

第一次打开 Wireshark 做 “Lab 1 : Introduction” 的时候,很多人其实根本不知道这个工具到底要我们干什么。我也是从计算机网络的第一堂实验课开始接触它,当时只被告诉一句话:“用它抓包,看里面的协议。” 这句话听起来平平无奇…

📰

Python词云实战:jieba分词与wordcloud参数调优指南

1. 从一堆杂乱文本到一张有信息量的词云,中间到底隔着什么很多人第一次接触词云,是看到别人用几百行评论生成了一张花花绿绿的图片,觉得这事挺简单——把文本丢进去,调个库,图片就出来了。但真正动手做过的人都知道&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬