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

Rust中空表达式语句引发值移动错误的原因咨询

Rust中空表达式引发所有权移动的原因

这不是什么隐藏方法在起作用,完全是Rust所有权规则的直接体现:

当你使用一个未实现Copy trait的类型(比如String)变量作为独立表达式时(就像你代码里的tstr;这一行),这个操作会直接触发所有权转移。

具体到你的代码:

fn main() {
    let tstr = String::from("test"); // tstr持有这个String的所有权
    tstr; // 单独使用变量作为表达式,所有权被转移给这个表达式的临时结果,但因为没有变量接收,这个String会被立即销毁
    println!("{}",tstr); // 此时tstr已经不再拥有任何值的所有权,自然会报"value borrowed here after move"错误
}

补充两点:

  • 对于实现了Copy trait的类型(比如整数、布尔值),单独写变量名只会复制值,不会转移所有权,所以不会出现这类问题。
  • String作为堆分配类型,设计上没有实现Copy——因为复制堆上的数据成本高,Rust强制用所有权转移来避免不必要的复制,同时保证内存安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:41:28