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

Rust vec动态数组的索引与借用

对于rust中的元素,可以是Copy类型和非Copy类型,从而导致在元素访问时存在不同的底层逻辑。
首先,对于vec[idx],返回的是引用&T
对于Copy类型:

    let mut ve=vec![1,2,3];let it=vec[1];//copyprintln!("{}", it32);

it的类型是int32而非&int32,因为:
vec[1]是a place expression,
let it=vec[1]; is evaluated in a value expression context
If the type of that value implements Copy, then the value will be copied.
所以i32会被copy给it
https://doc.rust-lang.org/reference/expressions.html

    let mut ve=vec![1,2,3];println!("{:#p}",vei32.as_ptr());let it32r = &vei32[0];//it32r 值为直接对vec第二个元素的借用println!("{:p}", it32r);//vei32.as_ptr()与it32r地址相同

it32r 值为直接对vec第二个元素的借用,原因:
The & (shared borrow) and &mut (mutable borrow) operators are unary prefix operators.
When applied to a place expression, this expressions produces a reference (pointer) to the location that the value refers to.
所以vei32[0]返回借用,&vei32[0]直接获取元素地址仍是借用。
https://doc.rust-lang.org/reference/expressions/operator-expr.html#borrow-operators

    let mut ve=vec![1,2,3];let it32r = &vei32[0];vei32.push(4);//报错://cannot borrow `vei32` as mutable because it is also borrowed as immutable //mutable borrow occurs hereprintln!("{:p}", it32r);

原因分析:对于vec,vec[idx]相当于vecbuffer的切片,所以&vei32[0]虽然是对第一个元素的借用,但也是对整个buffer的借用,所以会导致vei32.push(4);报错。
对于非Copy类型:

    let mut vec=vec![String::from("a"),String::from("b"),String::from("c")];let it = vec[1];//cannot move out of index of `Vec<String>`//move occurs because value has type `String`, which does not implement the `Copy` trait

所以对于非Copy类型元素,对索引需要借用:

    let mut vec=vec![String::from("a"),String::from("b"),String::from("c")];let it = &vec[1];vec.push(String::from("value"));//cannot borrow `vec` as mutable because it is also borrowed as immutable//mutable borrow occurs here//同上
http://www.jsqmd.com/news/53764/

相关文章:

  • 2025年圆二色光谱仪供货商权威推荐榜单:圆偏振荧光光谱仪/CD光谱仪/旋光色散谱仪器精选
  • 2025年11月继电器厂家选购指南:高性价比解决方案对比
  • 题解:P1471 方差
  • 2025英国留学中介哪个最好
  • 2025 年 11 月中国水泵厂家权威推荐榜:消防/多级/自吸/磁力/排污/真空/离心/卧式水泵全品类实力解析与高效选购指南
  • 2025年质量好的道路景观亮化工程优质企业榜单
  • 2025 年纸盖机成型机权威榜单:纸杯机、制杯机、全伺服纸杯机、纸碗机、纸盖机、纸咖啡杯机、超声波纸杯机、纸盘机智能化制造设备优选
  • AI时代资料收录的理论建构与实践逻辑
  • 2025 年 11 月热回收设备厂家权威推荐榜:热回收转轮、热管热回收、三维热管、U型热管、分解式乙二醇及烟气余热回收系统高效节能解决方案
  • rust语言Drop特征
  • 2025年11月营销智能体推荐榜单:基于市场数据的权威分析与选择指南
  • AssemblyLoadContext 的研究笔记
  • 2025年度中频炉靠谱厂家排名:500公斤中频炉/铝壳中频炉
  • 2025 年 11 月超声设备厂家权威推荐榜:覆盖河北、山西、辽宁、江苏、浙江、山东、广东等区域,精准成像与高效诊断的行业优选
  • Gerrit新增标签
  • 2025 年 11 月工业气体检测设备厂家权威推荐榜:密闭采样器、气体报警器、气体探测器、在线气体分析仪,精准监测与安全防护首选
  • 2025CMDB 厂商选型攻略:从全栈纳管到一体化运维,企业级配置管理核心指南
  • 2025年质量好的同步反弹缓冲托底轨/缓冲托底轨热门厂家推荐榜单
  • 2025 年超声波清洗设备厂家最新推荐榜,聚焦技术实力与市场口碑深度解析及优质品牌筛选龙门式 / 全自动 / 多臂式 / 履带式 / 通过式超声波清洗设备推荐
  • 2025年知名的工程液压油缸/一顺液压油缸最新TOP品牌厂家排行
  • 2025 年 11 月电动牙刷品牌权威推荐榜:声波/旋转/磁悬浮/叠振/扫振/旋振/智能/便携/儿童/成人全系列深度测评与选购指南
  • 2025年比较好的反弹钢珠轨厂家推荐及选择指南
  • 2025上海留学中介十大排名
  • 详细介绍:macOS 一键免密登录阿里云 ECS:SSH 密钥对认证完整指南
  • 2025 超声波清洗机源头厂家最新推荐排行榜:全品类设备适配多场景,深度解析核心优势全自动 / 多臂式 / 多槽式 / 履带式 / 通过式 / 单槽式 / 摆动式 / 平移式超声波清洗机公司推荐
  • 2025擅长香港留学的中介机构推荐
  • 2025年螺旋电动压力机直销厂家权威推荐:数控电动螺旋压力机/1000吨电动螺旋压力机/直驱电动螺旋压力机源头厂家精选
  • 界面简洁,上手快!适合新手的免费PPT生成软件推荐 - 实践
  • 日活10万的APP,如何精准计算广告收益? - 详解
  • AI如何消除决策疲劳:从厨房到职场的智能工作革命