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"错误 }
补充两点:
- 对于实现了
Copytrait的类型(比如整数、布尔值),单独写变量名只会复制值,不会转移所有权,所以不会出现这类问题。 String作为堆分配类型,设计上没有实现Copy——因为复制堆上的数据成本高,Rust强制用所有权转移来避免不必要的复制,同时保证内存安全。
内容的提问来源于stack exchange,提问作者av_sparrow
相关产品推荐
相关产品推荐

