You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中临时String值的生命周期及后续引用问题

Rust临时字符串的生命周期与后续访问问题

先看你提供的代码:

fn main(){
    let mut s = "Hi".to_string();
    
    s.push_str(&" foo".to_string());
    
    println!("{}",s);
}

问题1:foo这个值的生命周期位置在哪里?

" foo".to_string()创建的是一个临时String值,Rust编译器会自动延长它的生命周期,确保它在push_str函数调用的整个过程中保持有效。具体来说,这个临时值会存活到push_str执行完毕(也就是当前表达式s.push_str(...)结束时),之后就会被Rust的所有权系统自动回收释放内存。

问题2:如何在println之后以引用形式访问foo?

你无法直接在println!之后访问这个临时foo的引用。因为这个临时String没有绑定到任何变量,push_str执行完成后它就会被销毁,内存被释放,此时再尝试引用它会造成悬垂引用,这是Rust安全机制严格禁止的。

如果想要后续还能访问foo的引用,必须把这个String绑定到一个具名变量上,通过变量来延长它的生命周期,示例代码如下:

fn main(){
    let mut s = "Hi".to_string();
    let foo = " foo".to_string(); // 将字符串绑定到变量foo
    s.push_str(&foo);
    
    println!("{}", s);
    println!("{}", &foo); // println之后可以正常访问foo的引用
}

内容的提问来源于stack exchange,提问作者akhildevelops

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:35:29