新闻详情

新闻详情

首页 / 资讯中心 / 详情

std1.97.1——Option模块总览

发布时间:2026/9/7 22:51:18来源:尧图网络
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

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

2026年AI科研软件推荐指南:沁言学术赋能学术研究全流程 2026/9/8 15:04:00

2026年AI科研软件推荐指南:沁言学术赋能学术研究全流程

引言:进入2026年,AI 技术在科研领域的渗透已从“单点工具”迈向“全流程赋能”。面对市面上琳琅满目的 AI 科研软件,研究者常陷入选择困境:文献检索、写作润色、数据分析等工具往往各自为政,难以形成闭环。真正的科研提…

阅读更多 →
回声消除与自适应滤波:五大算法原理、选型与工程避坑指南 2026/9/8 15:04:00

回声消除与自适应滤波:五大算法原理、选型与工程避坑指南

做语音算法这些年,我见过太多在回声消除上吃亏的案子:开视频会议时对方不断听到自己的声音、智能音箱正放着歌却怎么都叫不醒、车载通话里发动机噪声和扬声器串扰混成一片分不清谁是谁。这些问题的骨子里,都绕不开回声消除(AEC&am…

阅读更多 →
重塑大模型推理数据流:DeepSeek V4 950 低精度优化全复盘 2026/9/8 15:04:00

重塑大模型推理数据流:DeepSeek V4 950 低精度优化全复盘

刚开始接手 DeepSeek V4 950 的推理优化时,我犯过一个典型错误——把注意力全放在权重矩阵的低精度转换上。FP8 权重、INT8 激活,一套组合拳打下去,显存确实降了,但端到端吞吐几乎没有变化,甚至在某些 batch 下延迟还涨…

阅读更多 →
Docker部署Ubuntu远程开发环境:AI编程的轻量级解决方案 2026/9/8 15:04:00

Docker部署Ubuntu远程开发环境:AI编程的轻量级解决方案

1. 为什么是 Docker 而不是虚拟机:远程开发环境选型背后的思路先说个身边的场景。最近几个月 AI 编程工具用得越来越勤,项目也从单人维护变成多机协作。我手头一台 Windows 主力机,一台 MacBook,有时候出差还要用笔记本连回办公室…

阅读更多 →
如何通过python控制nbiot 2026/9/8 15:04:00

如何通过python控制nbiot

如何通过控制NB-IoT要借以控制NB - IoT, 能够运用AT命令, 使用NB - IoT专用模块, 借助串口通信, 依托现有的NB - IoT库, 达成数据传输。当中, 运用AT命令是较为常见的办法之一, 缘由是它准许与NB - IoT模块开展直接通信以及配置。一种低功耗广域网技术, 也就是NB-IoT&#xff0…

阅读更多 →
卡方检验原理与SAS实操:从四格表到PROC FREQ完整指南 2026/9/8 15:00:59

卡方检验原理与SAS实操:从四格表到PROC FREQ完整指南

很多人一提卡方检验&#xff0c;第一反应就是“四格表”“P<0.05”&#xff0c;但真到用SAS跑数据的时候&#xff0c;常常被各种细节卡住。最近重新翻了《实用医学统计学与SAS应用》里分类变量比较的章节&#xff0c;结合自己这些年处理临床数据的经验&#xff0c;把卡方检验…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞